我使用PYSimpleGUI制作了一个GUI,它看起来像这样
其代码如下所示:
import PySimpleGUI as sg
sg.theme('Light Blue 2')
layout = [[sg.Text('Choose files to get started', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Select Logs you wish to validate', size=(30, 1), justification='left', font=("Helvetica", 15), relief=sg.RELIEF_RIDGE)],
[sg.Text('_' * 100, size=(65, 1))],
[sg.Checkbox('SVAS Log', size=(10,1), key='chk_svas'), sg.Checkbox('HSS Log', size=(10,1), key = 'chk_hss'), sg.Checkbox('AOTA Log', size=(10,1), key = 'chk_aota'), sg.Checkbox('Nexus Log', size=(10,1), key = 'chk_nexus')],
[sg.Button('Get Inputs')],
[sg.Text('_' * 100, size=(65, 1))],
[sg.Text('Request File', size=(15,1)), sg.Input(key='req'), sg.FileBrowse()],
[sg.Text('SVAS Log File', size=(15,1), key= 'txt_svas'), sg.Input(key='svas'), sg.FileBrowse(target= 'svas')],
[sg.Text('HSS Log File', size=(15,1)), sg.Input(key='hss'), sg.FileBrowse()],
[sg.Text('AOTA Log File', size=(15,1)), sg.Input(key='aota'), sg.FileBrowse()],
[sg.Text('Nexus Log File', size=(15,1)), sg.Input(key='nexus'), sg.FileBrowse()],
[sg.Submit('Generate Logs'), sg.Cancel('Quit'), sg.Button('Reset')],
[sg.Text('Generating Validation Logs...', size=(30,1), visible = False, key = 'progbar_head')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progbar', visible = False)]]
window = sg.Window('Provident Logs Validator', layout, size=(600, 400))
while True:
event, values = window.read()
if event == 'Quit':
break
print(event, values)
最初,下面的部分应完全隐藏
[sg.Text('SVAS Log File', size=(15,1), key= 'txt_svas'), sg.Input(key='svas'), sg.FileBrowse(target= 'svas')],
[sg.Text('HSS Log File', size=(15,1)), sg.Input(key='hss'), sg.FileBrowse()],
[sg.Text('AOTA Log File', size=(15,1)), sg.Input(key='aota'), sg.FileBrowse()],
[sg.Text('Nexus Log File', size=(15,1)), sg.Input(key='nexus'), sg.FileBrowse()]
并且应根据我选择/取消选择的复选框有选择地切换可见/不可见。例如,如果我仅选择SVA和HSS的复选框,则应仅显示以下内容:
[sg.Text('SVAS Log File', size=(15,1), key= 'txt_svas'), sg.Input(key='svas'), sg.FileBrowse(target= 'svas')],
[sg.Text('HSS Log File', size=(15,1)), sg.Input(key='hss'), sg.FileBrowse()],
如果我取消选中它们,它们将再次变为不可见
如何做到这一点?我不熟悉Python和PySimpleGUI
这并不完全是你想要的,但有一个简单的方法来控制它
[sg.Text('SVAS Log File', size=(15,1), key='txt_svas'), sg.Input(key='svas',visible=False, enable_events=True), sg.FileBrowse(key='svas')]
这意味着,如果您在需要时单击按钮,输入区域将打开。但是,它确实会影响布局,因此您可能不满意它。但这很简单
不确定这是否仍然相关,但我通过遵循PySimpleGUI的食谱中的this示例解决了这个问题
首先,创建一个helper函数,它返回一个固定的列(我从上面的链接复制了这个特定的代码,并通过bool
visible
对其进行了扩展。我还添加了pad=(0,0)
,因为sg.Column
使用了一个标准缩进,我们不希望在这里使用)当然,您也可以使用
pin
命令来隐藏和显示部分,但是定义一个函数会使它更简单、更美观。Column元素是一个容器元素,用于在窗口布局(source)中创建布局现在定义(子)布局,稍后要隐藏它
创建分区后,现在可以使用分区和函数
collapse
创建最终布局。但是,要隐藏和显示这些部分,您还需要在如下复选框中启用事件:[sg.Checkbox('generic_Label', enable_events=True, size=(x,y), key='some_key'), ...
在烹饪书中有一个section专门用于此。 对于您的情况,布局如下所示:使用
enable_event=True
复选框在其状态更改时触发事件。事件的名称是键。{a4}将如下所示:使用创建窗口后
您需要定义一些切换布尔值
。 然后进入事件循环:
TL;DR
定义函数
为要隐藏或显示的行或部分创建子布局:
请确保在复选框中输入参数
enable_event=True
,以触发给定节的显示或隐藏像平常一样创建窗口布局(复选框的
enable_event=True
参数除外),并使用collapse
函数添加部分创建窗口:
声明切换布尔值:
创建事件循环并检查事件是否等于复选框的键:
这解决了我的问题:
在中单击:
相关问题 更多 >
编程相关推荐