Как закрыть окно tkinter?
Как завершить программу Tkinter? Допустим, у меня есть такой код:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Как я должен определить quit функция для выхода из моего приложения?
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
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()
import sys from Tkinter import * def quit(): sys.exit() root = Tk() Button(root, text="Quit", command=quit).pack() root.mainloop()должны делать то, что вы просите.