Я не могу заставить название кнопки отображаться в графическом интерфейсе или сохранять ввод при нажатии на кнопку с помощью PySimpleGui

#python #user-interface #pysimplegui

Вопрос:

Я использую PySimpleGUI, и я хочу иметь возможность нажать на кнопку, чтобы она отображалась в тексте под кнопкой в качестве выделения. Варианты заключаются в разделении или заполнении данных, но я не могу понять, как заставить обработчик событий обновить текст или сохранить эту опцию, а затем заставить код действовать соответствующим образом на основе этой опции.

Код до сих пор выглядит примерно так

 import PySimpleGUI as sg

layout = [
          [sg.Text('Would you like to SPLIT or SPLIT AND DATA POPULATE')],
          [sg.Button('Split', key='-SPLIT-'), sg.Button('Split and Populate', key ='-SANDP-')],
          [sg.Text('Current Process:'), sg.Text('Process', key='-PROCESS-')]
         ]
window = sg.Window('Title', layout,size=(1000,500))

while True:
    event, values = window.read()
    if event is None or event == 'EXIT':
        break
    if event == '-SPLIT-':
        window['-PROCESS-'].update(values("-SPLIT-"))
        choice1 = window['-PROCESS-'].update("split")
    if event == '-Split and Populate-':
        window['-PROCESS-'].update("Split and Populate")
        choice2 = window['-PROCESS-'].update("Split and Populate")
window.close()

#psuedo code following
if choice1
    bla bla bla
if choice2
    bla bla bla
 

Я хочу, чтобы можно было нажать и сохранить это имя кнопки в choice1 или choice 2, а также чтобы это имя кнопки отображалось в графическом интерфейсе, возможно ли это?

Ответ №1:

Ключ будет параметром button_text sg.Button if key или k не указан и не дублируется, поэтому нет события для » — Разделить и заполнить-«.

В большинстве случаев значение a sg.Button не изменится, поэтому это не будут данные values из sg.Window().read . Чтобы получить текст sg.Button , вы можете вызвать метод get_text sg.Button .

Для события, сгенерированного из ключа элемента при нажатии на sg.Button или другой элемент, затем решите, что делать в if ... elif ... else ... инструкции.

 import PySimpleGUI as sg

layout = [
    [sg.Text('Would you like to SPLIT or SPLIT AND DATA POPULATE')],
    [sg.Button('Split', key='-SPLIT-'),
     sg.Button('Split and Populate', key ='-SANDP-')],
    [sg.Text('Current Process:'),
     sg.Text('Process', size=(0, 1), key='-PROCESS-')]
]
window = sg.Window('Title', layout, size=(1000,500))

while True:

    event, values = window.read()

    if event is None or event == 'EXIT':
        break

    elif event in ('-SPLIT-', '-SANDP-'):
        window['-PROCESS-'].update(value=window[event].get_text())
        if event == '-SPLIT-':
            pass
        elif event == '-SANDP-':
            pass

window.close()