如何结束Tkinter程序?假设我有以下代码:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
如何定义quit
退出应用程序的功能?
Answers:
您应该destroy()
用来关闭tkinter窗口。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
说明:
root.quit()
上面的行只是绕过了root.mainloop()
ie root.mainloop()
,如果quit()
执行了命令,ie仍将在后台运行。
root.destroy()
当destroy()
命令消失时,root.mainloop()
即root.mainloop()
停止。
因此,您只想退出该程序,就应该使用root.destroy()
它,因为它会停止mainloop()
。
但是如果你想运行无限循环并且你不想破坏你的Tk窗口并且想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
quit
将销毁所有小部件;如果小部件被破坏,mainloop
将退出。
def quit()
root.quit()
要么
def quit()
root.destroy()
root.destroy()
它终止主程序循环。参见:http
我认为您错误地理解了Tkinter的退出功能。此功能不需要您定义。
首先,您应该按以下方式修改功能:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
然后,您应该使用“ .pyw”后缀保存此文件,然后双击“ .pyw”文件以运行您的GUI,这一次,您可以单击“按钮”结束GUI,并且您还可以找到不会有不愉快的DOS窗口。(如果运行“ .py”文件,则退出功能将失败。)
最简单的方法是单击红色按钮(在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()
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
应该按照您的要求做。
我将以下代码用于Tkinter窗口的退出:
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
要么
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
要么
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
要么
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
下面的代码段。我提供一个小场景。
import tkinter as tk
from tkinter import *
root = Tk()
def exit():
if askokcancel("Quit", "Do you really want to quit?"):
root.destroy()
menubar = Menu(root, background='#000099', foreground='white',
activebackground='#004c99', activeforeground='white')
fileMenu = Menu(menubar, tearoff=0, background="grey", foreground='black',
activebackground='#004c99', activeforeground='white')
menubar.add_cascade(label='File', menu=fileMenu)
fileMenu.add_command(label='Exit', command=exit)
root.config(bg='#2A2C2B',menu=menubar)
if __name__ == '__main__':
root.mainloop()
我在这里创建了一个空白窗口,并在同一窗口(根窗口)上添加了文件菜单选项,在这里我仅添加了一个选项exit。
然后只需为root运行mainloop即可。
尝试做一次
root.destroy
将工作。
root.quit
也可以。
就我而言
quitButton = Button(frame, text = "Quit", command = root.destroy)
希望能帮助到你。
有一个简单的单行答案:
写-exit()
在命令中
而已!
raise SystemExit
这是第一次尝试的地方
self.destroy()
root.destroy()
没有
试试这个。
self.parent.destroy()
self.parent.quit()
也许您将像root这样的参数发送到您所做的帧。因此,如果您想完成该任务,则必须给您的父亲打电话,以便他可以将其全部关闭,而不是关闭每个孩子。