Tkinter, Toplevel image blanche
FerméouiIRL Messages postés 3 Date d'inscription jeudi 19 janvier 2023 Statut Membre Dernière intervention 20 janvier 2023 - 20 janv. 2023 à 10:52
4 réponses
Voici un exemple très basique de comment basculer d'un contenu à un autre.
import tkinter as tk # Fonction d'échange des contenus de la fenêtre def frame_switch(): # winfo_ismapped indique si un widget est « packed » if main_frame.winfo_ismapped(): window.title('Seconde frame') # Unpacking de la frame et packing de l'autre main_frame.pack_forget() second_frame.pack() else: window.title('Frame Principale') second_frame.pack_forget() main_frame.pack() window = tk.Tk() window.geometry('400x200') window.title('Frame Principale') # Frame visible au lancement main_frame = tk.Frame(window) main_frame.pack() info_label = tk.Label(main_frame, text='info blabla', bg='blue', fg='white') info_label.pack() switch_button = tk.Button(main_frame, text='Vers blabla', command=frame_switch) switch_button.pack() # Frame invisible au lancement et son contenu second_frame = tk.Frame(window) blabla_text = tk.Text(second_frame, width=50, height=7) blabla_text.pack() blabla_text.insert(0.0, 'blabla\n' * 5) back_button = tk.Button(second_frame, text='Revenir', command=frame_switch) back_button.pack() window.mainloop()
Si tu comprends le principe, tu n'auras aucun mal à l'adapter à ton besoin.
Bonne continuation.
Salut, il faudrait faire un exemple facilement reproductible, nous n'avons pas tes images, de plus la taille de la fenêtre est conséquente.
Puis pourquoi utiliser un canvas pour placer tes widgets ?
Maintenant, si on mets en commentaires toutes les parties des images, cela « fonctionne ».
from tkinter import * def open_toplevel(): global choix_on if choix_on == True: choix_on = False else: choix_on = True if choix_on == False: # win.withdraw() DG = Toplevel(win) width = 800 height = 600 canvas = Canvas(DG, width=width, height=height) canvas.pack() # fight = PhotoImage(file="fight.png") # fight.config(width=width, height=height) # canvas.create_image(0, 0, image=fight, anchor="se") atk = Button(DG, text="Attaquer", bg="red", fg="orange") inv_button = Button(DG, text="Inventaire", bg="blue", fg="purple") fuir_button = Button(DG, text="Fuir", bg="green", fg="yellow") canvas.create_window(200,400, window=atk) canvas.create_window(200, 425, window=inv_button) canvas.create_window(200, 450, window=fuir_button) win = Tk() # win.geometry("1920x1080") choix_on = True width = 800 height = 600 # droite = PhotoImage(file="flècheDroiteS.png") # droite.config(width="174", height="100") # gauche = PhotoImage(file="flecheGaucheS.png") # gauche.config(width="174", height="100") # choix = PhotoImage(file="choix.png") canva = Canvas(win, width=width, height=height) # canva.create_image(width, height, image=choix,anchor="se") label_start = Label(win, text="Que voulez vous faire ?", font=("Comic Sans MS", 20, "bold"), bg="#5db6ce", fg="white") canva.create_window(200, 200, window=label_start) canva.pack() FlecheDroite = Button(win,text='D', command=open_toplevel) # FlecheDroite.config(image=droite) FlecheDroite.pack() canva.create_window(200, 400, window=FlecheDroite) FlecheGauche = Button(win,text='G', command=open_toplevel) # FlecheGauche.config(image=gauche) FlecheGauche.pack() canva.create_window(300, 400, window=FlecheGauche) win.mainloop()
Ce que tu cherches à faire est de modifier le contenu de la fenêtre principale non ?
En ce cas, il faut affecter chacun des contenus à différentes frames, et selon ce que tu veux qu'il s'affiche, pack et unpack ces frames.
19 janv. 2023 à 21:26
merci beaucoup maintenant j'ai juste à regarde une bonne heure de comment utiliser les frames????
19 janv. 2023 à 21:26
fail les "???"
20 janv. 2023 à 10:52
merci beaucoup ^^