Я думаю, это то, что вы ищете?
import PySimpleGUI as sg
radio_choices = ['a', 'b', 'c']
layout = [
[sg.Text('My layout')],
[sg.Radio(text, 1) for text in radio_choices],
[sg.Button('Read')]
]
window = sg.Window('Radio Button Example', layout)
while True: # Event Loop
event, values = window.Read()
if event is None:
break
print(event, values)
Он производит это окно:
Есть несколько способов «построить» layout
переменную. Вот еще пара других комбинаций, которые создают такое же окно:
Этот первый строит по одной строке за раз, а затем складывает их в конце
# Build Layout
top_part = [[sg.Text('My layout')]]
radio_buttons = [[sg.Radio(x,1) for x in radio_choices]]
read = [[sg.Button('Read')]]
layout = top_part + radio_buttons + read
Он также создает по одной строке за раз, а затем складывает их вместе, но делает это в одном операторе вместо 4.
# Build layout
layout = [[sg.Text('My layout')]] + \
[[sg.Radio(text, 1) for text in radio_choices]] + \
[[sg.Button('Read')]]
Если вы хотите добавить эти кнопки по одной в каждую строку, то это тоже можно сделать несколькими способами. Если вы используете Python 3.6, то это будет работать:
layout = [
[sg.Text('My layout')],
*[[sg.Radio(text, 1),] for text in radio_choices],
[sg.Button('Read')]
]
Техника «Построить макет» будет работать в системах, в которых указанный выше оператор * недопустим.
radio_choices = ['a', 'b', 'c']
radio = [[sg.Radio(text, 1),] for text in radio_choices]
layout = [[sg.Text('My layout')]] + radio + [[sg.OK()]]
Оба этих варианта в сочетании с кодом окна и циклом событий создадут окно, которое выглядит следующим образом:
person
Mike from PSG
schedule
22.05.2019