Wie schließe ich ein tkinter Fenster?
Frage
Wie beende ich ein Tkinter-Programm? Sagen wir, ich diesen Code haben:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Wie soll ich definieren die quit
Funktion meine Anwendung zu beenden?
Lösung
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 Umgeht die root.mainloop()
d.h root.mainloop()
wird noch im Hintergrund ausgeführt werden, wenn quit()
Befehl ausgeführt wird.
root.destroy()
Während destroy()
Befehl verschwindet aus root.mainloop()
d.h root.mainloop()
nicht mehr.
So wie Sie nur das Programm beenden wollen, so sollten Sie root.destroy()
verwenden, da es wird es die mainloop()
stoppen.
Aber wenn Sie wollen etwas Endlosschleife laufen und Sie nicht möchten, dass Ihre Tk-Fenster zerstören und einige Code nach root.mainloop()
Linie ausführen möchten, dann 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
Andere Tipps
def quit()
root.quit()
oder
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()
Ich glaube, Sie zu Unrecht die Quit-Funktion von Tkinter verstanden. Diese Funktion ist nicht Sie benötigen zu definieren.
Als erstes sollten Sie Ihre Funktion wie folgt ändern:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Dann sollten Sie ‚.pyw‘ Suffix verwenden diese Dateien zu speichern und doppelklicken Sie auf die ‚.pyw‘ Datei Ihre GUI zu laufen, diesmal, um die GUI mit einem Klick auf den Button enden kann, und Sie können findet auch, dass es kein unangenehmes DOS-Fenster sein. (Wenn Sie die ‚.py‘ Datei ausführen, wird die Funktion verlassen fehl.)
Die übliche Methode, ein Python-Programm zu beenden:
sys.exit()
(zu dem Sie können auch einen Exit-Status übergeben) oder
raise SystemExit
wird in einem Tkinter Programm funktionieren.
Beleuchtung bei Verwirrung ...
def quit(self):
self.destroy()
exit()
A) destroy () stoppt den mainloop und tötet das Fenster, lässt aber Python läuft
B) exit () beendet den gesamten Prozess
Nur für den Fall, dass jemand zu klären, was verpaßt (destroy) tat, und die OP auch gefragt, wie man „Ende“ ein tkinter Programm.
In idlelib.PyShell
Modul root
Variable vom Typ Tk
definiert global sein
Am Ende der PyShell.main()
Funktion nennt es root.mainloop()
Funktion, die eine Endlosschleife ist und es läuft, bis die Schleife durch root.quit()
Funktion unterbrochen wird. Daher root.quit()
unterbricht nur die Ausführung von mainloop
Um alle Widgets zu zerstören zu diesen idlelib Fenstern betreffen, root.destroy()
muss genannt werden, die die letzte Zeile idlelib.PyShell.main()
Funktion ist.
Sie können mit:
root.destroy()
oder
root.quit()
Wenn das nicht funktioniert, ändern root auf das, was Ihre Variable zu Beginn des Programms war
import tkinter
main = Tk()
main.destroy()
main.mainloop
Der einfachste Weg wäre, den roten Knopf (ganz links auf macOS und ganz rechts unter Windows) zu klicken. Wenn Sie eine bestimmte Funktion auf eine Schaltfläche Widget binden möchten, können Sie dies 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, um die Dinge ein wenig komplizierter, Verwendung Protokollhandler und die destroy()
Methode.
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()
Falls jemand will, um ihre Escape-Taste binden, um die gesamte GUI zu schließen:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
Sie müssen dies eingeben:
root.destroy()
und Sie brauchen noch nicht einmal die quit () Funktion Ursache, wenn Sie festgelegt, dass als commmand wird das gesamte Programm beenden.
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()
Sollte das tun, was Sie fragen.
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()
I unten Codes verwenden für den Austritt von Tkinter Fenster:
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()
Versuchen Sie folgendes:
from Tkinter import *
import sys
def exitApp():
sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
versuchen dies.
self.parent.destroy()
self.parent.quit()
Sie vielleicht Wurzel wie Parameter an einem Rahmen senden, die Sie getan haben. Wenn Sie also wollen, es beenden Sie Ihren Vater anrufen, damit er alles, anstelle des Schließens jedes seiner Kinder schließen kann.