我该如何结束一个Tkinter程序?假设我有以下代码:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
我应该如何定义quit
函数以退出我的应用程序?
你应该使用destroy()
来关闭Tkinter窗口。
from Tkinter import *
#use tkinter instead of Tkinter (small, not capital T) if it doesn't work
#as it was changed to tkinter in newer Python versions
root = Tk()
Button(root, text="Quit", command=root.destroy).pack() #button to close the window
root.mainloop()
说明:
root.quit()
上面这行代码只是绕过了 root.mainloop()
,也就是说,如果执行 quit()
命令,root.mainloop()
仍然会在后台运行。
root.destroy()
destroy()
命令会在root.mainloop()
消失时消失,即root.mainloop()
停止。而<window>.destroy()
会完全销毁并关闭窗口。
因此,如果您想要完全退出和关闭程序,应该使用root.destroy()
,因为它停止了mainloop()
并销毁了窗口及其所有小部件。
但是,如果您想要运行一些无限循环并且不想销毁您的Tkinter窗口,并且想要在root.mainloop()
之后执行一些代码,则应该使用root.quit()
。例如:
from Tkinter import *
def quit():
global root
root.quit()
root = Tk()
while True:
Button(root, text="Quit", command=quit).pack()
root.mainloop()
#do something
def quit()
root.quit()
或者def quit()
root.destroy()
root.destroy()
,因为它可以终止主程序循环。参见:http://www.daniweb.com/software-development/python/threads/66698。 - Opal.quit
不会关闭窗口,它停止了 .mainloop
,如果 .mainloop
在程序的末尾,则终止程序。.destroy
是唯一可以销毁任何窗口的方法,除了 Python 解释器关闭之外。 - TheLizzardimport tkinter as tk
def quit(root):
root.destroy()
root = tk.Tk()
tk.Button(root, text="Quit", command=lambda root=root:quit(root)).pack()
root.mainloop()
混乱中的照明...
def quit(self):
self.destroy()
exit()
A) destroy() 停止主循环并关闭窗口,但不会停止 Python 运行。
B) exit() 停止整个进程。
为了防止有人错过 destroy() 的作用,原作者也问了如何“结束”一个 tkinter 程序。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
然后,您应该使用“.pyw”后缀保存这些文件,并双击“.pyw”文件运行您的GUI。此时,您可以通过单击按钮来结束GUI,而且您还会发现没有令人不悦的DOS窗口。(如果运行“.py”文件,退出功能将失败。)
如果有人想把Escape键绑定到关闭整个GUI界面:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
退出Python程序的常规方法:
sys.exit()
你可以传递退出状态的进程,或者
raise SystemExit
在Tkinter程序中,这将正常工作。
root.destroy()
当你将quit()函数设置为命令时,你甚至不需要使用它,因为它会退出整个程序。
root.mainloop()
的调用中返回。但是,任何在该调用之后可能存在的代码都将执行。这与退出整个程序不是同一件事。 - Booboo最简单的方法是点击红色按钮(在 macOS 上最左边,在 Windows 上最右边)。 如果您想将特定功能绑定到按钮小部件,可以这样做:
class App:
def __init__(self, master)
frame = Tkinter.Frame(master)
frame.pack()
self.quit_button = Tkinter.Button(frame, text = 'Quit', command = frame.quit)
self.quit_button.pack()
destroy()
方法。import tkMessageBox
def confirmExit():
if tkMessageBox.askokcancel('Quit', 'Are you sure you want to exit?'):
root.destroy()
root = Tk()
root.protocol('WM_DELETE_WINDOW', confirmExit)
root.mainloop()
除非你正在进行更复杂的操作,否则不需要打开一个函数来关闭窗口:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
quit
将会销毁所有小部件;如果小部件被销毁,mainloop
将会退出。 - Bryan Oakley