2016-07-29 6 views
2

Ich versuche, ein GIF-Bild in einem neuen Fenster tkinter einzufügen, wenn eine Schaltfläche geklickt wird, aber ich halte diesen FehlerPutten GIF-Bild in tkinter Fenster

Exception in Tkinter callback 
Traceback (most recent call last): 
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\idlelib\run.py", line 119, in main 
seq, request = rpc.request_queue.get(block=True, timeout=0.05) 
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\queue.py", line 172, in get 
raise Empty 
queue.Empty 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__ 
return self.func(*args) 
File "C:/Users/Afro/Desktop/mff.py", line 8, in sex 
canvas = tkinter.Label(wind,image = photo) 
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 2605, in __init__ 
Widget.__init__(self, master, 'label', cnf, kw) 
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 2138, in __init__ 
(widgetName, self._w) + extra + self._options(cnf)) 
_tkinter.TclError: image "pyimage1" doesn't exist 

Hier ist der Code ist. Das Bild und der Ort existieren tatsächlich.

import tkinter 

def six(): 
    wind = tkinter.Tk() 
    photo = tkinter.PhotoImage(file = 'American-Crime-Story-1.gif') 
    self = photo 
    canvas = tkinter.Label(wind,image = photo) 
    canvas.grid(row = 0, column = 0) 

def base(): 
    ssw = tkinter.Tk() 
    la = tkinter.Button(ssw,text = 'yes',command=six) 
    la.grid() 
base() 

Was mache ich falsch?

+1

Ich sehe keinen Verweis auf 'pyimage1' in Ihrem Code? –

+0

Wenn ich die Fotovariable ausdrücke zeigt es 'pyimage1' anstelle von' ' – HackAfro

Antwort

2

Sie versuchen, zwei Instanzen von Tk Fenster zu erstellen. Sie kann nicht tun, dass. Wenn Sie ein zweites Fenster oder Popup-Fenster möchten, sollten Sie das Widget Toplevel() verwenden.

Auch self bedeutet in diesem Zusammenhang nichts. Die Verwendung der Bildeigenschaft des Widgets wäre besser to keep a reference.

import tkinter 

ssw = tkinter.Tk() 

def six(): 
    toplvl = tkinter.Toplevel() #created Toplevel widger 
    photo = tkinter.PhotoImage(file = 'American-Crime-Story-1.gif') 
    lbl = tkinter.Label(toplvl ,image = photo) 
    lbl.image = photo #keeping a reference in this line 
    lbl.grid(row=0, column=0) 

def base(): 
    la = tkinter.Button(ssw,text = 'yes',command=six) 
    la.grid(row=0, column=0) #specifying row and column values is much better 

base() 

ssw.mainloop() 
+0

Danke, das hat funktioniert – HackAfro