Tkinter图像崩溃

时间:2017-04-07 16:44:11

标签: python image tkinter

所以我使用Tkinter在python中创建了一个脚本,事实是第一个Tkinter窗口弹出没有问题但是当代码进入第二个窗口时它说:

  

_tkinter.TclError:图片“pyimage1”不存在

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

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()
顺便说一句,python版本是2.7

1 个答案:

答案 0 :(得分:0)

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

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

正确的解决方法是永远不要使用多个Tk()。将所有代码放入Frame实例中,然后在时机成熟时销毁一个并加载另一个:

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 *)。