2017-04-07 194 views
0

所以我在Python做了一个脚本的Tkinter和事情是,第一Tkinter的窗口弹出没有问题,但是当代码进入到第二个窗口,它说:Tkinter的图像崩溃

_tkinter.TclError: image "pyimage1" doesn't exist

,我没找不到任何帮助我的东西,有人可以帮我吗? 下面是代码:

from Tkinter import * 
from PIL import ImageTk, Image 

def choose(): 
    global name, chosen 
    name = name1.get() 
    chosen = chosen1.get() 
    print name 
    print chosen 
    root0.quit() 

root0 = Tk() 
name1 = Entry(root0) 
name1.pack() 
chosen1 = Entry(root0) 
chosen1.pack() 
Button(root0, text="ENTER", command=choose).pack() 
root0.mainloop() 

root = Tk() 
img = ImageTk.PhotoImage(Image.open('person1.png')) 
panel1 = Label(root, image = img) 
panel1.pack(side="left") 
img2 = ImageTk.PhotoImage(Image.open('person2.png')) 
panel2 = Label(root, image = img2) 
panel2.pack(side="right") 
root.mainloop() 

顺便说一下,蟒版本是2.7

回答

0

这是使用2根(Tk()实例)的副作用。图像默认与第一个根窗口关联。快速的解决办法是提供图像与正确的根:

img2 = ImageTk.PhotoImage(Image.open('person2.png'), master=root) 

正确的解决方法是从来没有使用一个以上的Tk()。把所有的代码为框架的情况下,再消灭一个,当时间是正确加载其他:

import Tkinter as tk 

def choose(): 
    global name, chosen 
    name = name1.get() 
    chosen = chosen1.get() 
    print name 
    print chosen 
    frame0.destroy() # kill this frame 
    frame1.pack() # open new frame 

root = tk.Tk() 
frame0 = tk.Frame(root) 
name1 = tk.Entry(frame0) 
name1.pack() 
chosen1 = tk.Entry(frame0) 
chosen1.pack() 
tk.Button(frame0, text="ENTER", command=choose).pack() 

frame1 = tk.Frame(root) 
img = ImageTk.PhotoImage(Image.open('person1.png')) 
panel1 = tk.Label(frame1, image = img) 
panel1.pack(side="left") 
img2 = ImageTk.PhotoImage(Image.open('person2.png')) 
panel2 = tk.Label(frame1, image = img2) 
panel2.pack(side="right") 

#start the program 
frame0.pack() # load frame0 
root.mainloop() 

注意我也感动你从邪恶的通配符进口(from module import *)的距离。