Як закінчити програму Tkinter? Скажімо, у мене є такий код:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Як мені визначити quitфункцію виходу з моєї програми?
Як закінчити програму 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
quitзнищить усі віджети; якщо віджети будуть знищені, mainloopвийдуть.
def quit()
root.quit()
або
def quit()
root.destroy()
root.destroy()оскільки він завершує основний цикл програми. Див .: http://www.daniweb.com/software-development/python/threads/66698
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()
Думаю, ви неправильно зрозуміли функцію виходу Ткінтера. Ця функція не вимагає від вас визначення.
По-перше, вам слід змінити свою функцію наступним чином:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Потім вам слід використовувати суфікс «.pyw», щоб зберегти ці файли, і двічі клацніть файл «.pyw», щоб запустити свій графічний інтерфейс, на цей раз ви можете закінчити графічний інтерфейс натисканням кнопки, і ви також можете знайти, що не буде неприємного вікна DOS. (Якщо запустити файл '.py', функція виходу не вдасться.)
Освітлення у разі плутанини ...
def quit(self):
self.destroy()
exit()
A) знищення () зупиняє головний цикл і вбиває вікно, але залишає запущений python
B) exit () зупиняє весь процес
Просто для роз’яснення на випадок, якщо хтось пропустив те, що робить знищувач (), і ОР також запитав, як "завершити" програму tkinter.
Вам потрібно лише набрати це:
root.destroy()
і вам навіть не потрібна причина функції quit (), коли ви встановлюєте це як команду, вона вийде з усієї програми.
У 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). Якщо ви хочете прив’язати певну функцію до віджета кнопки, ви можете зробити це:
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()
Повинен робити те, про що ти просиш.
Я використовую наведені нижче коди для виходу з вікна 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()
Фрагмент коду нижче. Я пропоную невеликий сценарій.
import tkinter as tk
from tkinter import *
root = Tk()
def exit():
if askokcancel("Quit", "Do you really want to quit?"):
root.destroy()
menubar = Menu(root, background='#000099', foreground='white',
activebackground='#004c99', activeforeground='white')
fileMenu = Menu(menubar, tearoff=0, background="grey", foreground='black',
activebackground='#004c99', activeforeground='white')
menubar.add_cascade(label='File', menu=fileMenu)
fileMenu.add_command(label='Exit', command=exit)
root.config(bg='#2A2C2B',menu=menubar)
if __name__ == '__main__':
root.mainloop()
Я створив тут порожнє вікно і додаю опцію меню файлу в тому ж вікні (кореневе вікно), де додаю лише один варіант виходу .
Тоді просто запустіть mainloop для root .
Спробуйте зробити це один раз
root.destroyбуду працювати.
root.quitтакож буде працювати.
У моєму випадку у мене було
quitButton = Button(frame, text = "Quit", command = root.destroy)
Сподіваюся, це допоможе.
Існує проста однорядкова відповідь:
Пишіть - exit()у команді
Це воно!
raise SystemExit
це спрацювало з першої спроби, де
self.destroy()
root.destroy()
не
Спробуйте це:
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, до кадру, який ви зробили тож якщо ви хочете закінчити це, вам потрібно зателефонувати батькові, щоб він міг закрити все це, замість того, щоб закривати кожного зі своїх дітей.