1
votes

Comment superposer des widgets dans Tkinter (créer des formes devant l'image)?

J'essaie de dessiner des formes devant une image, mais je ne les vois pas - elles sont derrière. Comment faire reculer l'image d'un calque / les formes avancer d'un calque? Voici mon code:

photo = PhotoImage(file='Alveoli.ppm')
        img = Label(tk, image=photo)
        img.image = photo 
        img.place(x=0, y=0)
        oc = canvas.create_oval(0, 0, 400, 400, fill = 'red')

@Philipp Après avoir utilisé tag_raise cela ressemble toujours à ceci (l'image est à gauche): entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

Vous devriez pouvoir utiliser cette méthode: tag_raise()

Ce qui dans votre cas devrait ressembler à ceci:

canvas.tag_raise(oc)


6 commentaires

C'était toujours derrière l'image. J'utilise Python 3.7, juste au cas où tag_raise() est une chose 2.x.


De plus, lorsque j'utilise tag_raise , est-ce que j'utilise photo ou img ?


Voici un lien vers la documentation. Vous souhaitez soit élever l'ovale, soit abaisser l'img. Donc, si vous avez utilisé tag_raise sur l'img, alors rien ne s'est passé, car c'est déjà en haut.


Désolé, je voulais dire tag_lower .


Êtes-vous sûr que votre image et votre ovale sont tous deux sur la même toile?


Peut-il y avoir plusieurs toiles? Je suis pratiquement sure. Je n'ai fait qu'une seule toile.



0
votes

Vous ne pouvez pas superposer des éléments de canevas au-dessus des widgets incorporés. Si vous souhaitez dessiner au-dessus d'une image, l'image doit être un objet canevas créé avec create_image .

Une fois que vous avez fait cela, vous pouvez utiliser les méthodes de canevas lift et lower pour modifier l'ordre d'empilement (z-index) d'un élément.

photo = PhotoImage(file='Alveoli.ppm')
canvas.create_image(0, 0, image=photo, anchor="nw")
oc = canvas.create_oval(0, 0, 400, 400, fill = 'red')


0 commentaires

2
votes

utilisez simplement widget.tkraise(aboveThis=ob)

si vous voulez que le widget vienne au-dessus de tous les autres widgets, utilisez widget.tkraise()


0 commentaires