Jak zakończyć program Tkinter? Powiedzmy, że mam ten kod:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Jak zdefiniować quit
funkcję zamykania mojej aplikacji?
Jak zakończyć program Tkinter? Powiedzmy, że mam ten kod:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Jak zdefiniować quit
funkcję zamykania mojej aplikacji?
Odpowiedzi:
Powinieneś użyć destroy()
do zamknięcia okna tkintera.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
Wyjaśnienie:
root.quit()
Powyższa linia tylko Bocznikiroot.mainloop()
czyli root.mainloop()
nadal będzie uruchomiony w tle, jeżeli quit()
polecenie jest wykonywane.
root.destroy()
Podczas gdy destroy()
polecenie znika, root.mainloop()
czyli root.mainloop()
zatrzymuje się.
Więc jeśli chcesz po prostu zamknąć program, powinieneś użyć, root.destroy()
ponieważ zatrzyma on mainloop()
.
Ale jeśli chcesz uruchomić jakąś nieskończoną pętlę i nie chcesz niszczyć swojego okna Tk i chcesz wykonywać kod po root.mainloop()
linii, powinieneś użyć root.quit()
. Dawny:
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
zniszczy wszystkie widżety; jeśli widżety zostaną zniszczone, program mainloop
zakończy działanie.
def quit()
root.quit()
lub
def quit()
root.destroy()
root.destroy()
ponieważ kończy główną pętlę programu. Zobacz: 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()
Myślę, że źle zrozumiałeś funkcję Tkintera. Ta funkcja nie wymaga definiowania.
Najpierw powinieneś zmodyfikować swoją funkcję w następujący sposób:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Następnie powinieneś użyć przyrostka '.pyw', aby zapisać ten plik i dwukrotnie kliknąć plik '.pyw', aby uruchomić GUI, tym razem możesz zakończyć GUI jednym kliknięciem przycisku, a także możesz znaleźć to nie będzie nieprzyjemnego okna DOS. (Jeśli uruchomisz plik „.py”, funkcja wyjścia nie powiedzie się).
Oświetlenie w przypadku pomyłki ...
def quit(self):
self.destroy()
exit()
A) Destroy () zatrzymuje pętlę główną i zabija okno, ale pozostawia uruchomionego Pythona
B) exit () zatrzymuje cały proces
Tylko w celu wyjaśnienia, na wypadek gdyby ktoś przeoczył, co robi destruktor (), a OP zapytał również, jak „zakończyć” program tkinter.
wystarczy wpisać to:
root.destroy()
i nie potrzebujesz nawet funkcji quit (), ponieważ kiedy ustawisz ją jako polecenie, zakończy działanie całego programu.
W idlelib.PyShell
module root
zmienna typu Tk
jest zdefiniowana jako globalna
Na końcu PyShell.main()
funkcji wywołuje root.mainloop()
funkcję, która jest nieskończoną pętlą i działa do momentu przerwania pętli przez root.quit()
funkcję. W związku z root.quit()
tym tylko przerwie wykonaniemainloop
Aby zniszczyć wszystkie widżety związane z tym oknem idlelib, root.destroy()
należy wywołać ostatnią linię idlelib.PyShell.main()
funkcji.
Możesz użyć:
root.destroy()
Lub
root.quit()
Jeśli to nie zadziała, zmień root na taką, jaka była twoja zmienna na początku programu
import tkinter
main = Tk()
main.destroy()
main.mainloop
Najłatwiej byłoby kliknąć czerwony przycisk (najbardziej lewy w systemie MacOS i prawy w systemie Windows). Jeśli chcesz powiązać określoną funkcję z widgetem przycisku, możesz to zrobić:
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()
Lub, aby uczynić rzeczy nieco bardziej złożonymi, użyj programów obsługi protokołów i destroy()
metody.
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()
Powinien zrobić, o co prosisz.
Używam poniższych kodów do wyjścia z okna Tkinter:
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
lub
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
lub
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
lub
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
Fragment kodu poniżej. Podaję mały scenariusz.
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()
Utworzyłem tutaj puste okno i dodałem opcję menu pliku w tym samym oknie (okno główne), gdzie dodałem tylko jedną opcję wyjścia .
Następnie po prostu uruchom mainloop dla roota .
Spróbuj to zrobić raz
root.destroy
będzie działać.
root.quit
również zadziała.
W moim przypadku miałem
quitButton = Button(frame, text = "Quit", command = root.destroy)
Mam nadzieję, że to pomoże.
Istnieje prosta, jednowierszowa odpowiedź:
Napisz - exit()
w poleceniu
Otóż to!
from tkinter import *
def quit(root):
root.close()
root = Tk()
root.title("Quit Window")
def quit(root):
root.close()
button = Button(root, text="Quit", command=quit.pack()
root.mainloop()
)
w swoim, button
a także błędnego wywoływania funkcji.
raise SystemExit
to zadziałało za pierwszym razem, gdzie
self.destroy()
root.destroy()
nie
Spróbuj tego:
from Tkinter import *
import sys
def exitApp():
sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
Spróbuj tego.
self.parent.destroy()
self.parent.quit()
może wyślesz parametr podobny do roota do ramki, którą zrobiłeś. więc jeśli chcesz to skończyć, musisz zadzwonić do swojego ojca, aby mógł to wszystko zamknąć, zamiast zamykać każde ze swoich dzieci.