2017-04-30 2 views
1

J'ai créé un jeu de mots très basique pour lequel je veux créer un jeu de base. Je suis en train de tester un fichier qui va placer une image sur un canevas, puis placer des zones de texte pour les mots au-dessus de l'image.Pourquoi cela continue à apparaître dans deux fenêtres séparées? (Python)

Je n'arrive pas à utiliser la même fenêtre. La zone de texte apparaît dans une fenêtre différente de l'image. J'ai essayé plusieurs façons d'écrire ce code, mais je n'arrive pas à le comprendre. Toute aide serait grandement appréciée.

""" 
Python Delete2.py 
""" 


from tkinter import * 
from PIL import Image, ImageTk 

class App(Frame): 
    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.columnconfigure(0,weight=1) 
     self.rowconfigure(0,weight=1) 
     self.original = Image.open('687ee377f1820465b443950055671cb6.png') 
     self.image = ImageTk.PhotoImage(self.original) 
     self.display = Canvas(self, bd=0, highlightthickness=0) 
     self.display.create_image(0, 0, image=self.image, anchor=NW, tags="IMG") 
     self.display.grid(row=0, sticky=W+E+N+S) 
     self.pack(fill=BOTH, expand=1) 
     self.bind("<Configure>", self.resize)  


    def resize(self, event): 
     size = (event.width, event.height) 
     resized = self.original.resize(size,Image.ANTIALIAS)    
     self.image = ImageTk.PhotoImage(resized) 
     self.display.delete("IMG") 
     self.display.create_image(0, 0, image=self.image, anchor=NW, tags="IMG") 
     madlib = Tk()  
     Label(madlib, text="Please pick an Adjective.").grid(row=0) 
     e1 = Entry(madlib) 
     e1.grid(row=0, column=1) 

root = Tk() 
app = App(root) 
app.mainloop() 
root.destroy() 
+0

La «zone de texte» est-elle la référence à «Label»? – kabanus

Répondre

2

Ce

Tk() 

ne doit apparaître qu'une seule fois dans votre code - c'est la fenêtre principale. Vous l'appelez deux fois pour avoir deux fenêtres principales. Même si vous voulez une seconde fenêtre Toplevel est ce que vous devriez utiliser. Je garde la fenêtre racine dans votre classe:

self.root = master 

dans __init__. Ensuite, lorsque vous souhaitez intégrer des éléments dans cette fenêtre, utilisez-le!

Label(self.root, text="Please pick an Adjective.").grid(row=0) 
e1 = Entry(self.root) 

Si vous souhaitez intégrer dans le cadre spécifique (probablement la meilleure idée), il suffit d'utiliser l'auto - qui est déjà un cadre intégré à la racine:

Label(self, text="Please pick an Adjective.").grid(row=0) 
e1 = Entry(self) 

goutte madlib.

+0

Bon conseil! Merci, je pense que je l'ai compris! J'essaye juste de tout ajuster pour correspondre à mon programme. Merci! –