如何结束Tkinter程序?假设我有这段代码:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
如何定义quit
函数以退出我的应用程序?
答案 0 :(得分:76)
您应该使用destroy()
来关闭tkinter窗口。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
<强>解释强>
root.quit()
如果执行root.mainloop()
命令,上面一行 Bypasses root.mainloop()
即quit()
仍将在后台运行。
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
答案 1 :(得分:36)
def quit()
global root
root.quit()
或
def quit()
global root
root.destroy()
答案 2 :(得分:15)
import 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()
答案 3 :(得分:6)
我认为您错误地理解了Tkinter的退出功能。此功能不需要您定义。
首先,您应该按如下方式修改您的功能:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
然后,您应该使用'.pyw'后缀来保存这些文件并双击'.pyw'文件来运行您的GUI,这次,您只需单击Button即可结束GUI,您可以还发现不会有令人不愉快的DOS窗口。 (如果运行'.py'文件,则退出函数将失败。)
答案 4 :(得分:4)
退出Python程序的常用方法:
sys.exit()
(您也可以通过退出状态)或
raise SystemExit
可以在Tkinter程序中正常工作。
答案 5 :(得分:3)
混淆时的照明......
def quit(self):
self.destroy()
exit()
A)destroy()停止主循环并杀死窗口,但让python运行
B)exit()停止整个过程
只是为了澄清万一有人错过了destroy()正在做什么,OP也问过如何&#34;结束&#34;一个tkinter程序。
答案 6 :(得分:1)
你不必打开一个函数来关闭你的窗口,除非你在做一些更复杂的事情:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
答案 7 :(得分:1)
我通常使用默认的 tkinter quit
函数,但您可以自己做,如下所示:
from tkinter import *
from tkinter.ttk import *
window = Tk()
window.geometry('700x700') # 700p x 700p screen
def quit(self):
proceed = messagebox.askyesno('Quit', 'Quit?')
proceed = bool(proceed) # So it is a bool
if proceed:
window.quit()
else:
# You don't really need to do this
pass
btn1 = Button(window, text='Quit', command=lambda: quit(None))
window.mainloop()
答案 8 :(得分:1)
您只需要输入以下内容即可:
root.destroy()
并且您甚至不需要quit()函数,因为将其设置为commm时,它将退出整个程序。
答案 9 :(得分:1)
如果有人想将其“转义”按钮绑定到关闭整个GUI:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
答案 10 :(得分:1)
最简单的方法是单击红色按钮(在macOS上最左边,在Windows上最右边)。 如果要将特定功能绑定到按钮小部件,可以执行以下操作:
self.statusBar().showMessage('test') #checking if the statusBar is here and works
resetInterfaceAct = QAction('&Interface de Base', self)
resetInterfaceAct.setStatusTip('Remet l\'interface de base')
resetInterfaceAct.triggered.connect(self.interfaceStd)
menuBar = self.menuBar()
interfaceMenu = menuBar.addMenu('Interface')
interfaceMenu.addAction(resetInterfaceAct)
或者,为了使事情复杂一些,请使用协议处理程序和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()
答案 11 :(得分:1)
您可以使用:
root.destroy()
或者
root.quit()
如果这不起作用,请将root更改为程序开头的变量
import tkinter
main = Tk()
main.destroy()
main.mainloop
答案 12 :(得分:1)
在idlelib.PyShell
模块中,类型root
的{{1}}变量被定义为全局
在Tk
函数结束时,它调用PyShell.main()
函数,这是一个无限循环,它运行直到循环被root.mainloop()
函数中断。因此,root.quit()
只会中断root.quit()
为了销毁与该idlelib窗口有关的所有小部件,需要调用mainloop
,这是root.destroy()
函数的最后一行。
答案 13 :(得分:0)
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
应该按照你的要求做。
答案 14 :(得分:0)
def quit1():
root.destroy()
Button(root, text="Quit", command=quit1).pack()
root.mainloop()
答案 15 :(得分:0)
对于菜单栏:
def quit():
root.destroy()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="menubarname", menu=filemenu)
root.config(menu=menubar)
root.mainloop()
答案 16 :(得分:0)
我将以下代码用于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()
答案 17 :(得分:0)
下面的代码段。我提供了一个小场景。
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()
我在此处创建了一个空白窗口,并在同一窗口(根窗口)上添加了文件菜单选项,我只添加了一个选项退出。
然后只需运行主循环作为根。
尝试执行一次
答案 18 :(得分:0)
root.destroy
将起作用。
root.quit
也将起作用。
就我而言,
quitButton = Button(frame, text = "Quit", command = root.destroy)
希望有帮助。
答案 19 :(得分:0)
有一个简单的单行答案:
写-命令中的exit()
就是这样!
答案 20 :(得分:0)
from tkinter import *
def quit(root):
root.close()
root = Tk()
root.title("Quit Window")
def quit(root):
root.close()
button = Button(root, text="Quit", command=quit.pack()
root.mainloop()
答案 21 :(得分:0)
当然你可以将命令分配给按钮,但是,如果你正在制作一个UI,建议将相同的命令分配给“X”按钮:
def quit(self): # Your exit routine
self.root.destroy()
self.root.protocol("WM_DELETE_WINDOW", self.quit) # Sets the command for the "X" button
Button(text="Quit", command=self.quit) # No ()
答案 22 :(得分:-1)
raise SystemExit
这是第一次尝试, 在哪里
self.destroy()
root.destroy()
没有
答案 23 :(得分:-2)
试试这个:
from Tkinter import *
import sys
def exitApp():
sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
答案 24 :(得分:-3)
试试这个。
self.parent.destroy()
self.parent.quit()
也许您将root参数发送到您执行的框架。因此,如果你想完成它,你必须打电话给你的父亲,这样他就可以关闭它,而不是关闭他的每个孩子。