Как я могу создать переключатели из списка, используя PySimpleGui?
Я хочу использовать PySimpleGui для динамического создания переключателей из списка, но мои попытки вставить цикл в код компоновки ловят синтаксические ошибки. Можно ли это сделать с помощью API или мне нужно сделать это с помощью tkinter? Мой список создается целевым поиском файлов на сетевом диске.
Я попытался объединить "макет", поместив секцию переключателей в цикл for. Также попытался вставить цикл for в само объявление [sg.Radio()]. Ни то, ни другое не работает.
import PySimpleGUI as sg
xList = ['a', 'b', ... 'zz']
layout = [[sg.Text('Select a thingy')],
[sg.Radio(<for thingy in xList: 'thingy', thingy>)],
#^^^^^^ for loop is psuedo code
[sg.OK(), sg.Cancel()]]
1 ответ
Я думаю, это то, что вы ищете?
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()]]
Обе эти вариации в сочетании с кодом окна и циклом обработки событий создадут окно, которое выглядит следующим образом: