es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python previene múltiples instancias / instancia de tkinter

Python 3.10 (Sistema Operativo Windows 10, 64 bits)

Hola,

Compilé mi código de Python tkinter. Cuando ejecuto el archivo .exe dos veces, aparecen dos ventanas principales de tkinter (igual que cuando ejecuto el notepad.exe de Windows dos veces).

Pero quiero evitar que el archivo .exe de tkinter se pueda iniciar dos veces. ¿Puedo hacer algo para que tkinter solo se pueda iniciar una vez sin importar si hago clic en tkinter.exe en el escritorio de Windows una docena de veces?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes evitar múltiples instancias de tu aplicación tkinter utilizando una técnica llamada “aplicación de instancia única”. Una forma de implementar esto es creando un archivo de bloqueo cuando la aplicación se inicia y verificando la existencia del archivo de bloqueo cuando se inicia la aplicación nuevamente. Si el archivo de bloqueo existe, significa que la aplicación ya está en ejecución y la nueva instancia debe terminar. Si el archivo de bloqueo no existe, significa que la aplicación no se está ejecutando y la nueva instancia puede crear el archivo de bloqueo e iniciar la aplicación.

    Aquí tienes un código de ejemplo que demuestra esta técnica:

    import os
    import tkinter as tk
    
    # Verificar si el archivo de bloqueo existe
    archivo_bloqueo = "miapp.bloqueo"
    if os.path.exists(archivo_bloqueo):
        print("La aplicación ya se está ejecutando. Saliendo.")
        exit()
    
    # Crear archivo de bloqueo
    with open(archivo_bloqueo, "w") as f:
        f.write("")
    
    # Crear ventana tkinter
    root = tk.Tk()
    root.title("MiApp")
    # ...
    
    # Iniciar ciclo principal
    root.mainloop()
    
    # Eliminar archivo de bloqueo
    os.remove(archivo_bloqueo)
    

    En este código, primero verificamos si el archivo de bloqueo existe. Si es así, asumimos que la aplicación ya se está ejecutando y salimos. Si no existe, creamos el archivo de bloqueo y comenzamos la aplicación tkinter como de costumbre. Cuando la aplicación finaliza, eliminamos el archivo de bloqueo.

    También puedes agregar código para manejar excepciones y limpiar el archivo de bloqueo en caso de que la aplicación se bloquee o se termine inesperadamente.

Comments are closed.