Как закрыть окно 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()
должны делать то, что вы просите.