python - ocultar - ¿Cómo cierro una ventana de tkinter?
ocultar ventana en python (12)
¿Cómo termino un programa Tkinter? 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 debería definir la función de quit
para salir de mi aplicación?
Creo que entendiste mal la función para dejar de Tkinter. Esta función no requiere que defina.
Primero, debe modificar su función de la siguiente manera:
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
Luego, debe usar el sufijo ''.pyw'' para guardar estos archivos y hacer doble clic en el archivo ''.pyw'' para ejecutar su GUI, esta vez, puede finalizar la GUI con un clic del Botón, y también puede encontrar que no habrá una ventana de DOS desagradable. (Si ejecuta el archivo ''.py'', la función de abandono fallará).
El método habitual para salir de un programa de Python:
sys.exit()
(a lo que también puede pasar un estado de salida) o
raise SystemExit
funcionará bien en un programa Tkinter.
En el módulo idlelib.PyShell
, root
variable root
del tipo Tk
se define como global
Al final de la función PyShell.main()
llama a la función root.mainloop()
que es un bucle infinito y se ejecuta hasta que el bucle se interrumpe por la función root.quit()
. Por lo tanto, root.quit()
solo interrumpirá la ejecución de mainloop
Para destruir todos los widgets pertenecientes a esa ventana idlelib, se debe root.destroy()
, que es la última línea de la función idlelib.PyShell.main()
.
Iluminación en caso de confusión ...
def quit(self):
self.destroy()
exit()
A) destroy () detiene el mainloop y mata la ventana, pero deja a Python ejecutándose
B) exit () detiene todo el proceso
Solo para aclarar en caso de que alguien se haya perdido lo que estaba haciendo destroy (), y el OP también preguntó cómo "finalizar" un programa de tkinter.
Prueba esto:
from Tkinter import *
import sys
def exitApp():
sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()
Puedes usar:
root.destroy()
O
root.quit()
Si eso no funciona, cambie la raíz a cualquiera que sea su variable al comienzo de su programa
import tkinter
main = Tk()
main.destroy()
main.mainloop
prueba esto.
self.parent.destroy()
self.parent.quit()
tal vez envíes un parámetro como de raíz a un cuadro que hiciste. Entonces, si quieres terminarlo, debes llamar a tu padre para que pueda cerrarlo todo, en lugar de cerrar a cada uno de sus hijos.
Deberías usar destroy()
para cerrar una ventana de tkinter.
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
Explicación:
root.quit()
La línea anterior simplemente root.mainloop()
el root.mainloop()
es decir, root.mainloop()
seguirá ejecutándose en segundo plano si se ejecuta el comando quit()
.
root.destroy()
Mientras el comando destroy()
desaparece root.mainloop()
es decir, root.mainloop()
detiene.
Entonces, como solo desea salir del programa, debe usar root.destroy()
ya que detendrá el mainloop()
.
Pero si desea ejecutar un bucle infinito y no desea destruir su ventana Tk y desea ejecutar algún código después de la línea root.mainloop()
, entonces debe usar 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
def quit()
global root
root.quit()
o
def quit()
global root
root.destroy()
def quit1():
root.destroy()
Button(root, text="Quit", command=quit1).pack()
root.mainloop()
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()
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
Debería hacer lo que está preguntando.