【问题标题】:Procedure executes differently when imported than when run in its native module导入的过程与在其本机模块中运行时的执行方式不同
【发布时间】:2012-10-23 03:08:08
【问题描述】:

我有这个代码:

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 程序中拥有多个主循环,但是我应该怎么做呢?

【问题讨论】:

  • 在 GUI 应用程序中永远不会有多个主循环。

标签: python callback python-2.7 tkinter


【解决方案1】:

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

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

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

【讨论】:

  • 只是好奇:它真的是 Tcl/Tk 还是只是 Tk?
  • Tcl 是 Tk 工具包的宿主语言。 Tkinter 通过 Tcl 解释器访问 Tk 方法(它实际上执行 Tcl eval)。因此,我会回答,只是 Tcl。然而,在 Tkinter anwser 中只谈论 Tcl 可能听起来离题。
  • 感谢您的信息。我没有意识到这一点;认为 Tk 可能有自己的接口。
猜你喜欢
  • 2022-08-24
  • 2010-12-19
  • 2020-12-27
  • 2016-08-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多