我有一个创建GUI表单的程序:
win=Tk()
win.resizeable(width=True, height=True)
我有一个退出按钮,最初定义为:
quitButton=tk.Button(win,text="Quit", fg="red",underline=0,
command=win.destroy)
当以这种方式定义时,退出按钮工作得很好,关闭应用程序并完全关闭窗口。
我想将它包装在一个对话框中,以防止意外检查退出按钮。因此,我创建了一个QuitAction
函数来弹出一个对话框并验证用户是否打算按下按钮。
def QuitAction():
qtitle = 'You pressed the quit button'
qmessage = 'Any unsaved changes will be lost!\nDo you want to quit?'
q = messagebox.askyesno(qtitle, qmessage)
if q:
win.destroy
当我用command=win.destroy
替换command=QuitAction
时,函数执行(我得到对话框),dialog box但是当我单击YES按钮(应该执行win.destroy
)时,没有任何反应。
如果我用任何其他代码(例如,win.destroy
)替换print('You pressed yes')
,它的工作正常。如果我对win
做另一个指示(例如(print(win.minsize())
),它可以正常工作。
所以我似乎能够从我的win
函数中引用QuitAction
。
为什么win.destroy
没有执行?
我想到了...
当我改变
def QuitAction():
qtitle = 'You pressed the quit button'
qmessage = 'Any unsaved changes will be lost!\nDo you want to quit?'
q = messagebox.askyesno(qtitle, qmessage)
if q:
win.destroy
至
def QuitAction():
qtitle = 'You pressed the quit button'
qmessage = 'Any unsaved changes will be lost!\nDo you want to quit?'
q = messagebox.askyesno(qtitle, qmessage)
if q:
win.destroy()
一切正常 - 仍然习惯了Python。