Я думаю, это то, что вы ищете?
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()]]
Обе эти вариации в сочетании с кодом окна и циклом обработки событий создадут окно, которое выглядит следующим образом: