2014-02-08 140 views
2

下面給出的是一個用於創建使用的Tkinter和Python獨立的窗口代碼:不能調用按鈕命令:應用程序已經被破壞

import Tkinter 

Tkinter.NoDefaultRoot() 

win1=Tkinter.Tk() 
win2=Tkinter.Tk() 

Tkinter.Button(win1, text='Woho!',command=win1.destroy()).pack() 
Tkinter.Button(win2, text='Woho!',command=win2.destroy()).pack() 

win1.mainloop() 

在執行時會顯示:

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\eclipse\Python Projects\Project 1\Source1\mod.py", line 8, in <module> 
    Tkinter.Button(win1, text='Woho!',command=win1.destroy()).pack() 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 2106, in __init__ 
    Widget.__init__(self, master, 'button', cnf, kw) 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 2036, in __init__ 
    (widgetName, self._w) + extra + self._options(cnf)) 
_tkinter.TclError: can't invoke "button" command: application has been destroyed 

我是新來的Python因此不明白它的意思。我哪裏錯了?

+0

Tkinter不是設計用於運行兩個'Tk'實例。如果你需要多個窗口,創建'Tk'的一個實例,然後創建'Toplevel'的其他實例。 –

回答

3

win1.destroy()win2.destroy()刪除()

Tkinter.Button(win1, text='Woho!',command=win1.destroy()).pack() 
Tkinter.Button(win2, text='Woho!',command=win2.destroy()).pack() 
                 ^^ 

這導致win1.destroy方法調用,並使用,而不是方法本身的方法回調的返回值,。;導致主窗口在按鈕創建之前銷燬。

Tkinter.Button(win1, text='Woho!',command=win1.destroy).pack() 
Tkinter.Button(win2, text='Woho!',command=win2.destroy).pack() 
相關問題