【问题标题】:Create PySimpleGUI list with a key使用键创建 PySimpleGUI 列表
【发布时间】:2022-01-19 19:13:40
【问题描述】:

我希望在 PySimpleGUI 中有一个文本项列表,以便以后更新。也就是说,我想要一个列表的键。这可能是垂直的或水平的,我不知道会有多少项。

我最终得到了不同的用例,但目前的用例是用不同颜色制作单行文本项。其他时候,我需要编写和更新一个定制的表格,只是不同程度足以使表格小部件无法工作。

从概念上讲,我想做这样的事情:

layout = [ [sg.T('Titles and Things')], sg.ListThing(key='-data-', [[]]) ]

这样我可以:

window['-data-'].update(values=[ [sg.T(v, color=c)] for (v,c) in my_data ])

另一种无效的语法,表达我想要的方式是使用[key="-data-", sg.T('Item1'), sg.T('Item2')]

这可能吗?

【问题讨论】:

    标签: user-interface pysimplegui


    【解决方案1】:

    您可以更新单个布局元素,但 you cannot dynamically change the layout itself.

    可以创建 2 个或更多元素,其中只有一个可见,稍后根据需要切换它们。或者您可以关闭并使用其他布局重新创建窗口。或者结合这两种方法。

    切换布局示例:

    def change_layout():
        left_col_1 = sg.Column([[sg.Text(f'Text {i}') for i in range(4)]], visible=True, key='col_1')
        left_col_2 = sg.Column([[sg.Text(f'Text {i}')] for i in range(6)], visible=False, key='col_2')
        visible_1 = True
        layout = [[sg.Column([[left_col_1, left_col_2]]), sg.Button('Change layout', key='change')]]
        window = sg.Window('window', layout=layout, finalize=True)
    
        while True:
            event, values = window.read()
            print(event)
            print(values)
            print(visible_1)
            if event in ('Exit', sg.WIN_CLOSED):
                break
            if event == 'change':
                window['col_1'].update(visible=not visible_1)
                window['col_2'].update(visible=visible_1)
                visible_1 = not visible_1
    

    请注意,左侧部分的替代布局(left_col_1left_col_2)需要包含在容器(列、框架)中,以便在它们不可见时保持它们在窗口中的位置。

    【讨论】:

    • 您可以通过调用 Window.extend_layout(container, rows) 来“添加到布局”。正如您所指出的,可见性是另一个不错的方法!
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    相关资源
    最近更新 更多