如何关闭tkinter窗口?

时间:2008-09-21 12:40:05

标签: python tkinter

如何结束Tkinter程序?假设我有这段代码:

from Tkinter import *

def quit():
    # code to exit

root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

如何定义quit函数以退出我的应用程序?

25 个答案:

答案 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参数发送到您执行的框架。因此,如果你想完成它,你必须打电话给你的父亲,这样他就可以关闭它,而不是关闭他的每个孩子。