导入时的过程执行方式与在其本机模块中运行时不同

时间:2012-10-23 03:08:09

标签: python callback python-2.7 tkinter

我有这段代码:

def Annabeth():
    Annabeth= Tk()
    Annabeth.geometry('450x450')
    says = Label(Annabeth,text ='I was just making a general statement!')
    says.pack(side=BOTTOM)
     img = ImageTk.PhotoImage(Image.open('C:/Users/Geekman2/Pictures/Pictures/Annabeth.jpg'))
    image1 = Label(Annabeth,image=img)
    image1.pack()
    Annabeth.mainloop()

它位于模块

rox

当我调用

Annabeth()

我的窗口出现,显示图像,一切正常。 当我从另一个模块使用代码时

from rox import*
Annabeth()

它运作得很好 但是当我使用这段代码时

def callback():
     Annabeth()

game = Tk()
game.geometry('50x50+700+100')
Button1 = Button(game,text = '1',command =callback )
Button1.pack(side=LEFT)


game.mainloop()

窗口显示,但图片没有显示,我收到错误

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1974, in __init__
(widgetName, self._w) + extra + self._options(cnf))
TclError: image "pyimage1" doesn't exist

对于我的生活,我无法弄清楚是什么导致了这一点,显然我不应该在GUI程序中有多个主循环,但是我该如何做呢?

1 个答案:

答案 0 :(得分:2)

您不应该在程序中多次实例化Tk()。如果您想要多个窗口,可以考虑使用Toplevel

顺便说一句,它将解决您的几个主循环问题,因为Toplevel个实例将在与game相同的主循环中运行。

恰恰是ImageTk.PhotoImage在已创建的第一个Tcl / Tk解释器中创建图像。因此,在第二个Tcl / Tk实例中运行的标签image1无法到达图片。