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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top