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.

Volver automáticamente a la ventana superior después de cierto tiempo sin actividad utilizando Pysimplegui.

Estoy usando PySimpleGUI (versión 4.55.1) para hacer una GUI para una aplicación de Windows basada en Python.
Hay muchas pantallas en esta aplicación.
Por razones de seguridad, necesito implementar:
“Si no hay acciones en la GUI durante un cierto tiempo (por ejemplo, 1 minuto), entonces el programa volverá automáticamente a la pantalla principal”.

¿Existe alguna forma en que pueda lograr eso con PySimpleGUI?
La idea sola también me ayudaría mucho.

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible lograr esto con PySimpleGUI. Puede utilizar la función PySimpleGUI.Timer() para llevar un registro del tiempo desde la última acción del usuario. Si el temporizador excede un cierto umbral (en su caso, 1 minuto), puede utilizar la función PySimpleGUI.PopupAutoClose() para mostrar un mensaje al usuario y luego regresar a la pantalla principal. Aquí hay un código de ejemplo para demostrarlo:

    import PySimpleGUI as sg
    
    # Definir el diseño para la pantalla principal
    layout_pantalla_principal = [[sg.Text("¡Bienvenido a la aplicación!")],
                                 [sg.Button("Ir a la siguiente pantalla")]]  
    
    # Definir el diseño para la siguiente pantalla
    layout_siguiente_pantalla = [[sg.Text("Esta es la siguiente pantalla")],
                                 [sg.Button("Volver")]]  
    
    # Establecer la pantalla inicial como la pantalla principal
    layout_pantalla_actual = layout_pantalla_principal  
    
    # Crear un temporizador para detectar la inactividad del usuario
    temporizador = sg.Timer(60000)  # 1 minuto = 60.000 milisegundos
    
    # Crear la ventana de PySimpleGUI y el bucle de eventos
    ventana = sg.Window("Aplicación", layout_pantalla_actual)
    
    while True:
        evento, valores = ventana.read(timeout=1000)  # 1 segundo de tiempo límite
    
        if evento == sg.WIN_CLOSED:
            break
    
        if evento == "Ir a la siguiente pantalla":
            layout_pantalla_actual = layout_siguiente_pantalla
            ventana.close()
            ventana = sg.Window("Aplicación", layout_pantalla_actual)
            temporizador.Start()
    
        if evento == "Volver":
            layout_pantalla_actual = layout_pantalla_principal
            ventana.close()
            ventana = sg.Window("Aplicación", layout_pantalla_actual)
            temporizador.Start()
    
        if evento == sg.TIMEOUT:
            sg.PopupAutoClose("Volviendo a la pantalla principal debido a la inactividad")
            layout_pantalla_actual = layout_pantalla_principal
            ventana.close()
            ventana = sg.Window("Aplicación", layout_pantalla_actual)
            temporizador.Start()
    
    ventana.close()
    

    En este ejemplo, definimos dos pantallas usando PySimpleGUI.Layout(). Luego creamos un objeto Timer con una duración de 1 minuto y configuramos un bucle de eventos para la ventana de PySimpleGUI. Cada vez que el usuario hace clic en un botón, cambiamos a la pantalla correspondiente y reiniciamos el temporizador.

    Si no ocurren eventos durante 1 minuto, se activará el evento TIMEOUT y mostraremos un mensaje al usuario utilizando PopupAutoClose() antes de volver a la pantalla principal.

    Tenga en cuenta que también utilizamos la función close() para cerrar la ventana de PySimpleGUI actual antes de crear una nueva. Esto asegura que el diseño se actualice por completo y se borren todas las entradas del usuario.

    ¡Espero que esto ayude! Déjeme saber si tiene alguna otra pregunta.

Comments are closed.