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.

Crea una lista de PySimpleGUI con una clave

Deseo tener una lista de elementos de texto en un PySimpleGUI que pueda actualizar más tarde. Es decir, quiero tener una clave para la lista. Esto puede ser vertical u horizontal, y no sé cuántos elementos habrá.

Acabo teniendo diferentes casos de uso, pero el actual es hacer una sola línea de elementos de texto con diferentes colores. Otras veces, necesito escribir y actualizar una tabla personalizada, lo suficientemente diferente como para que el widget de tabla no funcione.

Conceptualmente, quiero hacer algo como esto:

layout = [ [sg.T(‘Títulos y cosas’)], sg.ListThing(key=’-data-‘, [[]]) ]

para que pueda:

window[‘-data-‘].update(values=[ [sg.T(v, color=c)] for (v,c) in my_data ])

Otra forma, de sintaxis incorrecta, de decir lo que quiero es usar [key=”-data-“, sg.T(‘Item1’), sg.T(‘Item2’)].

¿Es esto posible?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible tener una lista de elementos de texto en PySimpleGUI que se pueden actualizar más tarde usando una clave para la lista. Una forma de lograr esto es utilizando el elemento sg.Listbox con la opción “values”. Puedes definir una lista de valores predeterminados y luego actualizarla según sea necesario utilizando el método “update” del objeto de la ventana.

    Aquí tienes un ejemplo de cómo podría verse el código:

    import PySimpleGUI as sg
    
    # Define el diseño
    layout = [
        [sg.T('Títulos y Cosas')],
        [sg.Listbox(values=[], key='-data-', size=(30,10))]
    ]
    
    # Crea la ventana
    window = sg.Window('Mi Ventana', layout)
    
    # Define algunos datos predeterminados
    my_data = [('Item1', 'rojo'), ('Item2', 'verde'), ('Item3', 'azul')]
    
    # Actualiza los valores del listbox
    window['-data-'].update(values=[sg.T(v, text_color=c) for (v,c) in my_data])
    
    # Ejecuta el bucle de eventos
    while True:
        event, values = window.read()
        if event == sg.WIN_CLOSED:
            break
    
    # Cierra la ventana
    window.close()
    

    En este ejemplo, primero definimos el diseño con un elemento sg.Listbox que tiene una lista vacía de valores y una clave establecida en ‘-data-‘. Luego creamos la ventana y definimos algunos datos predeterminados que queremos mostrar en el listbox. Finalmente, actualizamos los valores del listbox pasando una comprensión de lista que crea un elemento sg.T para cada ítem en nuestra lista de datos, con el texto y el color de texto apropiados.

    Ten en cuenta que también se pueden utilizar diseños alternativos con sg.Table para mostrar y actualizar tablas personalizadas.

Comments are closed.