Tkinter的图像崩溃
问题描述:
所以我在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
答
这是使用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 *
)的距离。