首页 > 解决方案 > 如何在 PySimpleGui 中设置两个可互换的可见容器?

问题描述

我将有启用事件的单选按钮。基于所选值,我希望元素的容器之一可见而另一个不可见。我也知道所有元素都有一个可见的属性,我只想对一组元素执行此操作,而不仅仅是一个。

我知道列元素,但是我的两个容器应该位于相同的水平位置。

容器中包含哪些元素的示例:

    [sg.InputText(size=(50, 1), key='-FILENAME-'), sg.FileBrowse()],
    [sg.Button("Train", key="-train-")],
    [sg.ProgressBar(1, orientation='h', size=(20, 20), key='progress')],
    [sg.Canvas(key='-CANVAS-', size=(200, 200))],
    [sg.InputText(size=(50, 1), default_text="0.5", key='anomaly_threshold'),sg.Button("Decide Threshold",key="-anomaly_threshold-")],

标签: pythonuser-interfacepysimplegui

解决方案


用作sg.Column两个容器并将它们放在布局中的同一行。在 True 和 False 之间切换visible列的选项。

示例代码,

import PySimpleGUI as sg

radio_tag = ["Next", "PREV"]

sg.theme("DarkBlue3")
sg.set_options(font=("Courier New", 11))

cols = [
    [[sg.Text("Next element is sg.Input", size=(28, 1)), sg.Input()]],
    [[sg.Input(), sg.Text("Previous element is sg.Input", size=(28, 1))]],
]

layout =[
    [sg.Radio(text, "position", default=(i==0), enable_events=True, key=text)
        for i, text in enumerate(radio_tag)],
    [sg.Column(cols[i], visible=(i==0), key=f'COL {i}') for i in range(2)],
]

window = sg.Window("Title", layout, finalize=True)

while True:

    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event in radio_tag:
        for i in range(2):
            window[f'COL {i}'].update(visible=values[radio_tag[i]])

window.close()

推荐阅读