如何使用PySimpleGui从列表创建单选按钮?

时间:2019-05-22 16:50:35

标签: pysimplegui

我想使用PySimpleGui从列表中动态创建单选按钮,但是我在布局代码中插入循环的努力正在捕获语法错误。可以使用API​​来完成此操作,还是需要使用tkinter使其退出?我的列表是通过对网络驱动器进行有针对性的文件搜索生成的。

我尝试串联“布局”,将单选按钮部分置于for循环中。还尝试在[sg.Radio()]声明本身中插入for循环。都不行。

async function doStuffWith(dataPath){ 
  return new Promise( function(resolve, reject){
     fs.readFile(dataPath, function(err, bfr){ 
        resolve({results: JSON.parse(bfr)}); 
     }) 
  })
}

1 个答案:

答案 0 :(得分:0)

我认为这就是您想要的?

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)

它将产生以下窗口:

enter image description here

有多种“构建” 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()]]

将这些变体与窗口代码和事件循环结合使用时,将产生一个如下所示的窗口: enter image description here