Wie beende ich ein Tkinter-Programm? Nehmen wir an, ich habe diesen Code:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Wie muss ich die quit
-Funktion definieren, um meine Anwendung zu beenden?
Sie sollten destroy()
verwenden, um ein Tkinter-Fenster zu schließen.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
Erklärung:
root.quit()
Die obige Zeile nur Bypasses the root.mainloop()
, dh root.mainloop()
, wird weiterhin im Hintergrund ausgeführt, wenn der Befehl quit()
ausgeführt wird.
root.destroy()
Während der destroy()
-Befehl verschwindet, stoppt root.mainloop()
, dh root.mainloop()
.
Wenn Sie also das Programm einfach beenden möchten, sollten Sie root.destroy()
verwenden, da sonst die mainloop()
beendet wird.
Wenn Sie jedoch eine Endlosschleife ausführen möchten und Ihr Tk-Fenster nicht zerstören möchten und nach root.mainloop()
-Zeile Code ausführen möchten, sollten Sie root.quit()
verwenden. Ex:
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()
global root
root.quit()
oder
def quit()
global root
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()
Ich glaube, Sie haben die Beendigungsfunktion von Tkinter falsch verstanden. Diese Funktion erfordert keine Definition.
Zunächst sollten Sie Ihre Funktion wie folgt ändern:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Verwenden Sie dann das Suffix '.pyw', um diese Dateien zu speichern, und doppelklicken Sie auf die '.pyw'-Datei, um Ihre GUI auszuführen. Diesmal können Sie die GUI mit einem Klick auf die Schaltfläche beenden und auch finden Es wird kein unangenehmes DOS-Fenster angezeigt. (Wenn Sie die '.py'-Datei ausführen, schlägt die Quit-Funktion fehl.)
Die übliche Methode zum Beenden eines Python-Programms:
sys.exit()
(an den Sie auch einen Exit-Status übergeben können) oder
raise SystemExit
funktioniert gut in einem Tkinter-Programm.
Illumination bei Verwirrung ...
def quit(self):
self.destroy()
exit()
A) destroy () stoppt die Hauptschleife und tötet das Fenster, lässt jedoch den Python laufen
B) exit () stoppt den gesamten Vorgang
Nur um zu klären, falls jemand verpasst hat, was destroy () macht, und das OP fragte auch, wie man ein Tkinter-Programm "beendet".
Falls jemand seine Escape-Taste binden möchte, um die gesamte GUI zu schließen:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
Am einfachsten klicken Sie auf die rote Schaltfläche (bei MacOS ganz links und unter Windows ganz rechts). Wenn Sie eine bestimmte Funktion an ein Schaltflächen-Widget binden möchten, können Sie Folgendes tun:
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()
Oder verwenden Sie Protokollhandler und die destroy()
-Methode, um die Sache etwas komplexer zu gestalten.
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()
Im idlelib.PyShell
-Modul ist die Variable root
vom Typ Tk
als global definiert
Am Ende der PyShell.main()
-Funktion ruft es die root.mainloop()
-Funktion auf, die eine Endlosschleife ist, und läuft, bis die Schleife durch die root.quit()
-Funktion unterbrochen wird. Daher unterbricht root.quit()
nur die Ausführung von mainloop
.
Um alle Widgets zu löschen, die zu diesem idlelib-Fenster gehören, muss root.destroy()
aufgerufen werden. Dies ist die letzte Zeile der idlelib.PyShell.main()
-Funktion.
Sie können verwenden:
root.destroy()
Oder
root.quit()
Wenn dies nicht funktioniert, ändern Sie root so, wie Ihre Variable zu Beginn Ihres Programms war
import tkinter
main = Tk()
main.destroy()
main.mainloop
sie müssen nur Folgendes eingeben:
root.destroy()
und Sie brauchen nicht einmal die Funktion quit (), wenn Sie dies als Befehl festlegen, wird das gesamte Programm beendet.
Ich benutze die folgenden Codes zum Verlassen des Tkinter-Fensters:
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
oder
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
oder
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
oder
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Sollte tun, was Sie fragen.
def quit1():
root.destroy()
Button(root, text="Quit", command=quit1).pack()
root.mainloop()
Für Menüleisten:
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()