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?
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, programmainloop
zakończy działanie.def quit() root.quit()
lub
def quit() root.destroy()
źródło
root.destroy()
ponieważ kończy główną pętlę programu. Zobacz: http://www.daniweb.com/software-development/python/threads/66698import 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()
źródło
Zwykła metoda zamykania programu w języku Python:
(do którego możesz również przekazać status wyjścia) lub
raise SystemExit
będzie działać dobrze w programie Tkinter.
źródło
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ę).
źródło
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.
źródło
wystarczy wpisać to:
i nie potrzebujesz nawet funkcji quit (), ponieważ kiedy ustawisz ją jako polecenie, zakończy działanie całego programu.
źródło
W przypadku, gdy ktoś chce powiązać swój przycisk Escape z zamknięciem całego GUI:
master = Tk() master.title("Python") def close(event): sys.exit() master.bind('<Escape>',close) master.mainloop()
źródło
W
idlelib.PyShell
moduleroot
zmienna typuTk
jest zdefiniowana jako globalnaNa końcu
PyShell.main()
funkcji wywołujeroot.mainloop()
funkcję, która jest nieskończoną pętlą i działa do momentu przerwania pętli przezroot.quit()
funkcję. W związku zroot.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.źródło
Możesz użyć:
Lub
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
źródło
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()
źródło
def quit1(): root.destroy() Button(root, text="Quit", command=quit1).pack() root.mainloop()
źródło
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.
źródło
W przypadku pasków menu:
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()
źródło
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()
źródło
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
źródło
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.
źródło
Istnieje prosta, jednowierszowa odpowiedź:
Napisz -
exit()
w poleceniuOtóż to!
źródło
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()
źródło
)
w swoim,button
a także błędnego wywoływania funkcji.raise SystemExit
to zadziałało za pierwszym razem, gdzie
nie
źródło
Spróbuj tego:
from Tkinter import * import sys def exitApp(): sys.exit() root = Tk() Button(root, text="Quit", command=exitApp).pack() root.mainloop()
źródło
Spróbuj tego.
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.
źródło