【问题标题】:How can I create radio buttons from a list using PySimpleGui?如何使用 PySimpleGui 从列表中创建单选按钮?
【发布时间】:2019-05-22 16:50:35
【问题描述】:

我想使用 PySimpleGui 从列表中动态创建单选按钮,但我在布局代码中插入循环的努力正在捕捉语法错误。这可以用 API 完成还是我需要用 tkinter 来完成?我的列表是通过网络驱动器的目标文件搜索生成的。

我尝试连接“布局”,将单选按钮部分放在 for 循环中。还尝试在 [sg.Radio()] 声明本身中插入一个 for 循环。两者都不起作用。

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()]]

【问题讨论】:

  • 你遇到了什么语法错误?

标签: pysimplegui


【解决方案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()]]

当与窗口代码和事件循环结合使用时,这两种变化都会产生一个如下所示的窗口:

【讨论】:

  • 感谢您的快速响应和多个非常准确的示例。有没有办法将每个单选按钮放在单独的行中?我尝试将“\n”作为列表中每个项目的一部分,这只导致文本与 RB 略有偏移。如果列表很短,单行就可以了。
  • 好的,我已经编辑了答案以包括在各个行上制作单选按钮的方法。是否没有很好的文档或示例程序来展示如何做这样的事情?您会在哪里查看文档或示例程序?像这样的东西的演示程序名称是什么? “以编程方式构建的布局”'
  • 文档中添加了一个相当大的部分,专门用于使用代码创建布局。这个问题是一个很好的问题,因为它激发了相当多的研究并最终记录了许多 Pythonic 生成窗口的方法。使用列表推导来制作整个窗口很有趣。自述文件和 ReadTheDocs 已更新。
  • 虽然 OP 没有问...该解决方案没有为组分配密钥。这意味着它不能动态更新。或者我错过了什么@Mike-from-PSG?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2019-07-04
  • 2017-11-07
  • 2020-07-05
相关资源
最近更新 更多