2016-07-29 2 views
2

Я пытаюсь вставить рисунок в новом окне Tkinter, когда кнопка нажата, но я получаю эту ошибкуПоложив рисунок в окне Tkinter

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 

Вот код. Изображение и местоположение действительно существуют.

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() 

Что я делаю неправильно?

+1

Я не вижу ссылки на 'pyimage1' в вашем коде? –

+0

если я распечатаю переменную фотографии, она показывает 'pyimage1' вместо' ' – HackAfro

ответ

2

Вы пытаетесь создать два экземпляра окна Tk. Вы не может сделайте это. Если вам нужно второе окно или всплывающее окно, вы должны использовать виджет Toplevel().

Кроме того, self не означает ничего в этом контексте. Использование свойства изображения виджета было бы лучше 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

Спасибо, это сработало – HackAfro

Смежные вопросы