Les canvas tkinter c'est bien. Mangez en !
Franchement tkinter est un peu vieillissant niveau graphique mais c'est ultra puissant.
Le canvas ne fais pas exception.
cv.create_text(...) (ainsi que tous les create_foo) retourne l'id de l'objet créé.
Si tu utilises des classes comme proposé dans le commentaire précédent, tu peux stocker l'id et modifier le texte (avec cv.itemconfigure(id, ...)) plutôt que supprimer tous les éléments et recréer les lignes et textes.
Tu peux associer des tags à des items dans un canvas. Ça te permet ensuite de retrouver tes petits et de les modifier d'un seul coup.
Par exemple, si tu tags correctement tes éléments, tu peux les modifier très facilement :
# On crée la grilleforligneinrange(De.hauteur):forcolonneinrange(De.largeur):cv.create_text(X,Y,text=...,tags=("case",f"l:{ligne}",f"c:{colonne}"))# On change le texte d'une case x,y:cv.configureitem(f"l:{x} && c:{y}",text=...)# Oui, on peut faire des requêtes "complexes" sur les tags# Il existe deux tags magiques : "all" pour tous les éléments et "current" pour .... l'item sous le curseur de la souris. Du coup, tu peux trouver l'élément à modifier avec :cv.find_withtag("current")
Et puis tu peux binder des événements directement aux tags plutôt qu'au canvas:
Par contre il n'est pas possible d'associer une valeur arbitraire à un item.
Du coup, difficile de retrouver les coordonnées d'un item à partir de l'item lui même.
Soit en utilisant un dict qui map l'id de l'item à ses coordonnée (ou l'objet python qui va bien)
Soit en scannant les tags de l'item:
Et bien sûr, ce mode de fonctionnement se retrouve dans tout tk, des widgets de base qui peuvent être tagués et avec possibilité de rebinder tout les widgets au widget text qui permet de grande configuration du texte.
Le tout en rajoutant la possibilité de mettre n'importe quel widget dans un canvas ou du text.
C'est parfois un peu (削除) bas niveau (削除ここまで) ancien, il faut parfois écrire un peu (beaucoup) plus de code que pour d'autre toolkit pour des trucs un peu complexe, mais tkinter est le seul toolkit graphique qui soit si configurable (à l'exception peut-être des kivy et QtQML que je n'ai pas testé, mais on est dans un autre domaine de toolkit)
Je me languis d'une mise à jour majeur de tk ou d'un nouveau toolkit un peu plus moderne mais qui reprenne les même principe de fonctionnement que tk.
# Tkinter canvas
Posté par GaMa (site web personnel) . En réponse au message Un démineur pour apprendre.... Évalué à 6.
Les canvas tkinter c'est bien. Mangez en !
Franchement tkinter est un peu vieillissant niveau graphique mais c'est ultra puissant.
Le canvas ne fais pas exception.
cv.create_text(...)(ainsi que tous les create_foo) retourne l'id de l'objet créé.Si tu utilises des classes comme proposé dans le commentaire précédent, tu peux stocker l'id et modifier le texte (avec
cv.itemconfigure(id, ...)) plutôt que supprimer tous les éléments et recréer les lignes et textes.Tu peux associer des tags à des items dans un canvas. Ça te permet ensuite de retrouver tes petits et de les modifier d'un seul coup.
Par exemple, si tu tags correctement tes éléments, tu peux les modifier très facilement :
Et puis tu peux binder des événements directement aux tags plutôt qu'au canvas:
Par contre il n'est pas possible d'associer une valeur arbitraire à un item.
Du coup, difficile de retrouver les coordonnées d'un item à partir de l'item lui même.
Soit en utilisant un dict qui map l'id de l'item à ses coordonnée (ou l'objet python qui va bien)
Soit en scannant les tags de l'item:
Bien sûr, du coup, ta fonction resize doit modifier les items existant au lieu de les recréer.
LA doc qui va bien c'est l'officielle de tlc/tk : https://www.tcl.tk/man/tcl8.5/TkCmd/contents.html
C'est un peu brut puisque c'est en tcl mais le mapping tcl=>python est assez simple, en se basant sur tkdocs (https://tkdocs.com/tutorial/canvas.html) qui affiche des exemples dans plusieurs langages on retrouver facilement ses petits.
Et bien sûr, ce mode de fonctionnement se retrouve dans tout tk, des widgets de base qui peuvent être tagués et avec possibilité de rebinder tout les widgets au widget text qui permet de grande configuration du texte.
Le tout en rajoutant la possibilité de mettre n'importe quel widget dans un canvas ou du text.
C'est parfois un peu
(削除) bas niveau (削除ここまで)ancien, il faut parfois écrire un peu (beaucoup) plus de code que pour d'autre toolkit pour des trucs un peu complexe, mais tkinter est le seul toolkit graphique qui soit si configurable (à l'exception peut-être des kivy et QtQML que je n'ai pas testé, mais on est dans un autre domaine de toolkit)Je me languis d'une mise à jour majeur de tk ou d'un nouveau toolkit un peu plus moderne mais qui reprenne les même principe de fonctionnement que tk.
Matthieu Gautier|irc:starmad