如何关闭tkinter窗口?

Mat*_*ory 71 python tkinter

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

from Tkinter import *

def quit():
    # code to exit

root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我该如何定义quit退出应用程序的功能?

aki*_*i92 88

您应该使用destroy()关闭tkinter窗口.

from Tkinter import *

root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

说明:

root.quit()
Run Code Online (Sandbox Code Playgroud)

上述线只是跳过root.mainloop()root.mainloop()将仍然在背景如果运行quit()被执行的命令.

root.destroy()
Run Code Online (Sandbox Code Playgroud)

虽然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
Run Code Online (Sandbox Code Playgroud)

  • 你的第一个陈述是错误的.调用`quit`会破坏所有小部件; 如果小部件被销毁,`mainloop`将退出. (3认同)
  • 如果使用了root.quit(),那么如何在不同的脚本中再次找到窗口以便销毁(以便不继续使用系统资源)? (2认同)

Mat*_*ory 36

def quit()
    root.quit()
Run Code Online (Sandbox Code Playgroud)

要么

def quit()
    root.destroy()
Run Code Online (Sandbox Code Playgroud)

  • 对不起,我找到了答案,只是想我会分享它.最好使用`root.destroy()`,因为它终止了主程序循环.见:http://www.daniweb.com/software-development/python/threads/66698](http://www.daniweb.com/software-development/python/threads/66698/299275#post299275) (8认同)

小智 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()
Run Code Online (Sandbox Code Playgroud)


dF.*_*dF. 6

退出Python程序的常用方法:

sys.exit()
Run Code Online (Sandbox Code Playgroud)

(您也可以将退出状态传递给该状态)或

raise SystemExit
Run Code Online (Sandbox Code Playgroud)

在Tkinter程序中可以正常工作。

  • 问题是关于关闭 tkinter 窗口,而不是使用 tkinter 的程序。 (3认同)

小智 6

我想你错误地理解了Tkinter的退出功能.此功能不需要您定义.

首先,您应该按如下方式修改您的函数:

from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

然后,您应该使用'.pyw'后缀来保存这些文件并双击'.pyw'文件来运行您的GUI,这次,您可以通过单击Button结束GUI,您也可以找到没有令人不快的DOS窗口.(如果运行'.py'文件,则退出函数将失败.)


小智 5

在混乱的情况下照明...

def quit(self):
    self.destroy()
    exit()
Run Code Online (Sandbox Code Playgroud)

A)destroy() 停止主循环并杀死窗口,但让 python 继续运行

B) exit() 停止整个过程

只是为了澄清以防有人错过了 destroy() 正在做什么,并且 OP 还询问了如何“结束” tkinter 程序。