2014-07-16 3 views
1

J'ai utilisé le code ci-dessous (avec différents noms de variables pour chaque section) pour créer une image d'arrière-plan pour chaque fenêtre tkinter. Chacun de ceux-ci est initié dans une fonction et les deux fonctionnent bien indépendamment.Python Tkinter: Comment appliquer une nouvelle image d'arrière-plan lors de l'ouverture d'une nouvelle fenêtre tk?

Lors du chargement d'une fonction d'une autre cependant, la seconde ne parvient pas à afficher une image. (J'ai essayé d'importer tout pertinent dans chaque fonction aussi). Cela fonctionne dans le cas où vous utilisez tk.destruct(), cependant si je veux le garder ouvert, ou le masquer avec. remove(), l'image ne s'affiche pas, rendant la seconde fenêtre inutile.

background_image=tk.PhotoImage(...) 
background_label = tk.Label(parent, image=background_image) 
background_label.place(x=0, y=0, relwidth=1, relheight=1) 
+0

Afficher plus de code. – furas

+0

Peut-être que vous avez un problème avec 'garbage collector' qui supprime' background_image' de la mémoire - problème très populaire avec 'PhotoImage' dans les fonctions et les classes. – furas

Répondre

0

Ok J'ai créé une solution pour vous. Fondamentalement tout ce dont vous avez besoin est d'utiliser tk.Toplevel() pour la deuxième fenêtre tkinter et assurez-vous que le 'parent' est root2 afin que l'image apparaisse dans la deuxième fenêtre. J'ai utilisé des boutons pour les images, vous aviez des étiquettes donc vous voudrez peut-être changer cela, mais les boutons m'ont permis d'ouvrir facilement une nouvelle fenêtre tk, j'ai aussi utilisé .pack(), pas .place(), car c'était plus rapide pour moi. Peut-être aussi utile pour vous de savoir que j'ai utilisé python 3.3 avec Windows alors vous pourriez avoir besoin d'un capital T pour tkinter.

import tkinter as tk 

root1 = tk.Tk() 

def new_window(): 
    root2 = tk.Toplevel() 
    # click the last button and all tk windows close 
    def shutdown(): 
     root1.destroy() 
     root2.destroy() 
    background_image2 = tk.PhotoImage(file = '...') 
    background_button2 = tk.Button(root2, image = background_image2, command = shutdown) 
    background_button2.pack() 
    root2.mainloop() 

background_image1 = tk.PhotoImage(file = '...') 
# have used a button not a label for me to make another tk window 
background_button1 = tk.Button(root1, image = background_image1, command = new_window) 
background_button1.pack() 

root1.mainloop() 

@ user2589273 La prochaine fois que vous devez ajouter plus de code si les réponses peuvent être facilement donnés, et sur mesure pour vous, juste une suggestion. J'espère que cela t'aides.

+0

Merci @ user2691540, le ** tk.Toplevel() ** a résolu le problème.La raison pour laquelle je n'ai pas inclus de code était simplement parce que ma structure de programme était très basique et pas très loin de ce que vous avez inclus ci-dessus. – user2589273

+0

Génial, heureux je pourrais aider. – W1ll1amvl

Questions connexes