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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top