Вопрос

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

from Tkinter import *

def quit():
    # code to exit

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

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

Это было полезно?

Решение

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

from Tkinter import *

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

Объяснение:

root.quit()

Приведенная выше строка просто Обходит тот самый 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()
    root.quit()

или

def quit()
    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()

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

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

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

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

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

sys.exit()

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

raise SystemExit

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

Подсветка на случай путаницы...

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

A) destroy() останавливает основной цикл и завершает работу окна, но оставляет python запущенным

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

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

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

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

Для того, чтобы уничтожить все виджеты, относящиеся к этому окну idlelib, root.destroy() должен быть вызван, который является последней строкой idlelib.PyShell.main() функция.

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

root.destroy()

Или

root.quit()

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

import tkinter

main = Tk()

main.destroy()

main.mainloop

Самым простым способом было бы нажать красную кнопку (крайнюю левую в macOS и крайнюю правую в Windows).Если вы хотите привязать определенную функцию к виджету button, вы можете сделать это:

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()

На случай, если кто-то захочет привязать свою кнопку Escape к закрытию всего графического интерфейса:

master = Tk()
master.title("Python")

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.mainloop()

вам нужно только ввести это:

root.destroy()

и вам даже не нужна функция quit(), потому что, когда вы установите ее в качестве commmand, она завершит работу всей программы.

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()

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

Для строк меню:

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()

Я использую приведенные ниже коды для выхода из окна 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()

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

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-подобный параметр во фрейм, который вы сделали.поэтому, если вы хотите закончить это, вы должны позвонить своему отцу, чтобы он мог закрыть все это, вместо того чтобы закрывать каждого из своих детей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top