1

私はこのコードを持っています:

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プログラムに複数のメインループを持つことは想定されていませんが、どうすればこれを行うことができますか?

4

1 に答える 1

2

Tk()プログラムで複数回インスタンス化することは想定されていません。Toplevel複数のウィンドウが必要な場合は、使用を検討してください。

ちなみに、Toplevelインスタンスは と同じメインループで実行されるため、複数のメインループの問題が解決されgameます。

正確には、ImageTk.PhotoImage作成された最初の Tcl/Tk インタープリターでイメージが作成されます。image1したがって、 2 番目の Tcl/Tk インスタンスで実行されるラベルは画像に到達できません。

于 2012-10-23T05:24:35.043 に答える