Tkinter图像崩溃

2024-09-24 02:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用python和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()

顺便说一下,python版本是2.7


Tags: 代码namefromimageimporttkinterrootpack
1条回答
网友
1楼 · 发布于 2024-09-24 02:16:37

这是使用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 *)移开。你知道吗

相关问题 更多 >