Edit : Poste initial édité en fonction de vos remarques ( très pertinentes ! mais le problème en lui-même n'est toujours pas réglé)
j'aimerai changer d'image de fond de ma petite appli tkinter (le lien contient le code github complet), j'ai commencé à coder qq chose ^^:
voici les points du code important
from os import chdir
# On se place dans le répertoire d'images s'il existe
try:
chdir("images_gif/")
except:
pass
def create_canvas(root):
""" creer la zone de dessin qui va contenir l'entrelacs ainsi que le quadrillage"""
mycanvas = tk.Canvas(root, bg='white', width=600, height=500)
return mycanvas
Ensuite j'aimerai proposé une liste de theme à choisir avec une listbox :
def create_listbox(root):
listbox = tk.Listbox(root, font=('times', 13))
listbox.place(x=100, y=100)
listbox.pack(side=tk.LEFT)
# items contenus dans la listbox
for item in ["theme blue", "theme tourbi", "theme nature", "theme cube",
"theme time","theme giphy"]:
listbox.insert(tk.END, item)
return listbox
ce qui permet de déclenché l'evt :
listbox = ui.create_listbox(root)
listbox.bind('<<ListboxSelect>>', ui.change_im)
et ici l'evenement déclanché :
def change_im(evt):
# En fonction du choix de l'utilisateur dans la listbox, on charge l'image appropriée
""" Gest° de l'evt selection dans la listbox """
value = str((main.listbox.get(main.listbox.curselection())))
main.current_theme = value
print(main.current_theme)
print("evt change_im enclanché")
if main.current_theme == "theme tourbi":
tof = tk.PhotoImage(file="tourbi.jpg")
elif main.current_theme == "theme planet":
tof = tk.PhotoImage(file="theme4.gif")
elif main.current_theme == "theme nature":
tof = tk.PhotoImage(file="nature.gif")
elif main.current_theme == "theme cube":
tof = tk.PhotoImage(file="cubes.gif")
elif main.current_theme == "theme time":
tof = tk.PhotoImage(file="time.gif")
elif main.current_theme == "theme giphy":
tof = tk.PhotoImage(file="giphy.gif")
else:
tof = tk.PhotoImage(file="theme4.gif")
# on supprime d'abord l'image courante, repérée avec le tag 'background-image'
main.my_canvas.delete('background-image')
main.image = main.my_canvas.create_image(0, 0, image=tof)
main.my_canvas.im = tof
# Ensuite on configure la nouvelle image avec le tag 'background-image'
main.my_canvas.itemconfigure(main.image, tags=('background-image', ))
Si je mets une image par dessus elle ne risque pas d'écraser tout l'affichage ? (et c'est ce qu'elel fait)
Pour donner une petite idée : pour l'instant ça ressemble à ça :

(PS : toutes les remarques ne répondant pas forcément à la question mais plutôt d'ordre général que soit sur ma façon de coder, l'interface elle-même etc... sont toujours les bienvenues ;)
Edit : à l'execution j'ai bien :
theme green
evt change_im enclanché
Edit2 : Pour tester le code directement, faire : (necessite d'avoir git/python3/tkinter)
git clone https://github.com/boblinux/tkinter_project
cd tkinter_project
python3 libui_fork.py
Donc grâce à l'affichage du print, je peux constater que l'evenement est bien déclenché, je peux choisir entre plusieurs themes mais ces derniers écrasent tout l'affichage courant =/ et ne se contentent pas de s'afficher en fond d'image (comme un fond d'écran quoi x) ).