ventana una ocultar maximizar interfaz grafica emergente con como cerrar botones abrir python tkinter

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.