it-swarm-eu.dev

Jak zavře okno tkinter?

Jak mohu ukončit program Tkinter? Řekněme, že mám tento kód:

from Tkinter import *

def quit():
    # code to exit

root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

Jak mám definovat funkci quit pro ukončení aplikace?

60
Matt Gregory

Měli byste použít destroy() zavřít okno tkinter.

from Tkinter import *

root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()

Vysvětlení:

root.quit()

Výše uvedený řádek právě Bypasses the root.mainloop() tj. root.mainloop() bude stále spuštěn na pozadí, pokud je proveden příkaz quit().

root.destroy()

Zatímco destroy() příkaz zmizí root.mainloop() tj root.mainloop() zastaví.

Takže jak chcete program ukončit, měli byste použít root.destroy(), protože to zastaví mainloop().

Pokud ale chcete spustit nekonečnou smyčku a nechcete zničit vaše okno Tk a chcete po kódu root.mainloop() spustit nějaký kód, měli byste použít root.quit(). Příklad:

from Tkinter import *
def quit():
    global root
    root.quit()

root = Tk()
while True:
    Button(root, text="Quit", command=quit).pack()
    root.mainloop()
    #do something
72
aki92
def quit()
    global root
    root.quit()

nebo

def quit()
    global root
    root.destroy()
35
Matt Gregory
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()
14
kaytec

Myslím, že jste špatně pochopili funkci Tkinter. Tato funkce nevyžaduje zadání.

Nejprve byste měli upravit svou funkci následujícím způsobem:

from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()

Pak byste měli použít příponu „.pyw“ pro uložení těchto souborů a poklepání na soubor „.pyw“ pro spuštění grafického uživatelského rozhraní. nebude žádné nepříjemné DOS okno. (Pokud spustíte soubor „.py“, funkce ukončení se nezdaří.)

6
TreeDoNotSplit

Obvyklá metoda pro ukončení programu Python:

sys.exit()

(ke kterému můžete také předat stav výstupu) nebo 

raise SystemExit

bude fungovat v programu Tkinter.

4
dF.

Osvětlení v případě záměny ...

def quit(self):
    self.destroy()
    exit()

A) destroy () zastaví mainloop a zabije okno, ale ponechá běh pythonu

B) exit () zastaví celý proces

Jen aby se v případě, že někdo vynechal to, co zničilo (), vysvětlil, a OP se také ptal, jak „ukončit“ program kinteru.

3
Martin Guiles

V případě, že někdo chce svázat své tlačítko Escape pro zavření celého GUI:

master = Tk()
master.title("Python")

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.mainloop()
1
Nukyi

Nejjednodušším způsobem by bylo kliknout na červené tlačítko (nejvíce vlevo na makrach a nejvíce vpravo na Windows). Pokud chcete svázat určitou funkci s widgetem tlačítka, můžete to provést takto:

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()

Nebo, aby se věci trochu složitější, použijte protokol handlerů a metodu destroy().

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()
1
Ian Gabaraev

V idlelib.PyShell modulu je root proměnná typu Tk definována jako globální

Na konci funkce PyShell.main() zavolá funkci root.mainloop(), která je nekonečnou smyčkou a běží, dokud není smyčka přerušena funkcí root.quit(). root.quit() tedy pouze přeruší provádění mainloop

Aby bylo možné zničit všechny widgety náležející tomuto idlelibu, je třeba zavolat root.destroy(), což je poslední řádek funkce idlelib.PyShell.main().

1
RAD

Můžeš použít:

root.destroy()

Nebo

root.quit()

Pokud to nefunguje, změňte kořen na to, co byla vaše proměnná na začátku programu

import tkinter

main = Tk()

main.destroy()

main.mainloop
1
JackHumphries

stačí zadat:

root.destroy()

a nepotřebujete ani funkci quit (), když ji nastavíte jako commmand a ukončí celý program.

1
BE Official

Pro výstup z okna Tkinter používám níže uvedené kódy:

from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()

nebo

from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()

nebo

from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()

nebo

from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
0
kourosh
import sys
from Tkinter import *
def quit():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

Měli byste dělat to, o co se ptáte.

0
Harrison Sills
def quit1():
     root.destroy()

Button(root, text="Quit", command=quit1).pack()
root.mainloop()
0
user9093127

Pro lišty nabídek:

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()
0
LenyaKap