¿Cómo puedo cerrar una tkinter ventana?
Pregunta
¿Cómo puedo finalizar una Tkinter programa?Digamos que tengo este código:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
¿Cómo debo definir el quit
función para salir de mi aplicación?
Solución
Usted debe utilizar destroy()
para cerrar un tkinter ventana.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
Explicación:
root.quit()
El por encima de la línea de Evita el root.mainloop()
yo.e root.mainloop()
todavía estarán funcionando en segundo plano si quit()
se ejecuta el comando.
root.destroy()
Mientras destroy()
comando se desvanecen fuera root.mainloop()
yo.e root.mainloop()
detiene.
Así como usted desea salir del programa por lo que debe utilizar root.destroy()
como se va a dejar la mainloop()
.
Pero si desea ejecutar algunos bucle infinito y no quieren destruir su Tk ventana y queremos ejecutar algún código después de root.mainloop()
la línea entonces usted debe utilizar root.quit()
.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
Otros consejos
def quit()
root.quit()
o
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()
Creo que erróneamente se entiende el quit de la función de Tkinter.Esta función no requiere que usted defina.
En primer lugar, usted debe modificar su función como sigue:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
A continuación, se debe utilizar '.pyw' sufijo para guardar estos archivos y haga doble clic en el.pyw' archivo para ejecutar la interfaz gráfica de usuario, en este momento, usted puede poner fin a la interfaz gráfica de usuario con un clic del Botón, y usted puede también encontrar que no habrá desagradable ventana de DOS.(Si usted ejecute '.py' archivo, el quit de la función fallará.)
El método habitual para salir de un programa en Python:
sys.exit()
(a la que también se puede pasar de un estado de salida) o
raise SystemExit
funcionará bien en un Tkinter programa.
La iluminación, en el caso de la confusión...
def quit(self):
self.destroy()
exit()
A) destruir() detiene el mainloop y mata a la ventana, pero deja de python se ejecuta
B) exit() detiene todo el proceso
Solo para aclarar, en caso de que alguien se perdió lo destroy() estaba haciendo, y el OP también se le preguntó cómo el "final" de un tkinter programa.
En idlelib.PyShell
módulo root
variable de tipo Tk
se define como global
Al final de PyShell.main()
la función se llama root.mainloop()
función que es un bucle infinito y se ejecuta hasta que el bucle se interrumpe por root.quit()
la función.Por lo tanto, root.quit()
sólo interrumpir la ejecución de mainloop
Con el fin de destruir todos los widgets correspondientes para que idlelib ventana, root.destroy()
necesita ser llamada, que es la última línea de idlelib.PyShell.main()
la función.
Usted puede utilizar:
root.destroy()
O
root.quit()
Si eso no funciona, cambiar de raíz a lo que es su variable fue en el inicio de su programa de
import tkinter
main = Tk()
main.destroy()
main.mainloop
La manera más fácil sería hacer clic en el botón rojo (más a la izquierda en macOS y de más a la derecha en Windows).Si desea enlazar una función específica para un botón de widget, usted puede hacer esto:
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()
O, para hacer las cosas un poco más complejas, el uso de controladores de protocolo y el destroy()
método.
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()
En caso de que alguien quiere enlazar su botón Escape para el cierre de la totalidad de la GUI:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
sólo tienes que escribir esto:
root.destroy()
y usted ni siquiera necesita salir de la función() causa cuando se establece que como comando que va a dejar el programa en su totalidad.
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()
Debe hacer lo que están pidiendo.
Para barras de menú:
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()
Yo uso por debajo de los códigos para la salida de Tkinter ventana:
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
o
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
o
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
o
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
Intente esto:
from Tkinter import *
import sys
def exitApp():
sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
intenta esto.
self.parent.destroy()
self.parent.quit()
tal vez usted enviar raíz como parámetro a un marco en que usted lo hizo.así que Si quieres terminar con ella usted tiene que llamar a su padre para que él pueda cerrar todo, en lugar de cierre de cada uno de sus hijos.