Как закрыть окно tkinter?


Как завершить программу Tkinter? Допустим, у меня есть такой код:

from Tkinter import *

def quit():
    # code to exit

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

Как я должен определить quit функция для выхода из моего приложения?

13 51

13 ответов:

вы должны использовать destroy() закрыть окно tkinter.

from Tkinter import *

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

объяснение:

root.quit()

выше строка просто обход the root.mainloop() Я.е 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
def quit()
    global root
    root.quit()

или

def quit()
    global root
    root.destroy()
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()

Я думаю, что вы неправильно поняли функцию quit Tkinter. Эта функция не требует определения.

во-первых, вы должны изменить вашу функцию следующим образом:

from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()

затем, вы должны использовать '.pyw ' суффикс, чтобы сохранить эти файлы и дважды щелкните '.pyw ' файл для запуска графического интерфейса, на этот раз, вы можете закончить графический интерфейс с одним нажатием кнопки, и вы также можете найти, что не будет никакого неприятного окна DOS. (Если вы запустите файл'. py', функция quit будет неудача.)

обычный метод выхода из программы Python:

sys.exit()

(к которому вы также можете передать статус выхода) или

raise SystemExit

будет работать нормально в программе Tkinter.

освещение в случае замешательства...

def quit(self):
    self.destroy()
    exit()

a) destroy () останавливает mainloop и убивает окно, но оставляет python запущенным

B) exit () останавливает весь процесс

просто чтобы уточнить, если кто-то пропустил то, что делал destroy (), и OP также спросил, как "закончить" программу tkinter.

In idlelib.PyShell модуль root переменной типа Tk определяется как глобальный

в конце PyShell.main() функция, которую он вызывает root.mainloop() функция, которая является бесконечным циклом и выполняется до тех пор, пока цикл не будет прерван

вы можете использовать:

root.destroy()

или

root.quit()

Если это не работает, измените root на то, что когда-либо ваша переменная была в начале вашей программы

import tkinter

main = Tk()

main.destroy()

main.mainloop

самый простой способ-нажать красную кнопку (самая левая на 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()
def quit1():
     root.destroy()

Button(root, text="Quit", command=quit1).pack()
root.mainloop()
import sys
from Tkinter import *
def quit():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

должны делать то, что вы просите.

попробуйте это:

from Tkinter import *
import sys
def exitApp():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()

попробуйте это.

    self.parent.destroy() 
    self.parent.quit()

может быть, вы отправляете root как параметр в кадр, который вы сделали. поэтому, если вы хотите закончить его, вы должны позвонить своему отцу, чтобы он мог закрыть все это, вместо того, чтобы закрывать каждого из своих детей.