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