如何在PySimpleGUI中隐藏/显示列时更新滚动条?
解决PySimpleGUI滚动列内容更新后滚动条不生效的问题
当点击复选框显示隐藏的子菜单后,外层滚动列的滚动范围不会自动更新,导致新增内容超出可视区域后无法滚动访问。只需在切换子菜单可见性后,调用滚动列的contents_changed()方法,强制它重新计算内容尺寸即可解决。
修改后的代码如下:
import PySimpleGUI as sg hidden_layout = [[sg.Radio('some more choices 1','choice', default=True, key='ch1')], [sg.Radio('some more choices 2','choice', default=True, key='ch2')], [sg.Radio('some more choices 3','choice', default=True, key='ch3')]] layout_buttons = [[sg.Radio('some choice 1','choice', default=True, key='ch1')], [sg.Radio('some choice 2','choice', default=True, key='ch2')], [sg.Radio('some choice 3','choice', default=True, key='ch3')], [sg.Checkbox('go bigger',default=False, key='bigger', enable_events=True)], [sg.pin(sg.Column(hidden_layout, key='hidden', visible=False))]] layout_blah = [[sg.Multiline(size=(200, 200), font='Courier 10')]] layout_master = [[sg.Column(layout_buttons, vertical_alignment='top', scrollable=True, vertical_scroll_only=True, size=(200,200), key='buttons'), sg.Column(layout_blah, vertical_alignment='top')]] window = sg.Window('Example',layout_master,size=(500,200)) while True: event, values = window.read(timeout=100) if event in (sg.WIN_CLOSED, 'Exit'): break elif event == 'bigger': window['hidden'].update(visible=values['bigger']) # 通知滚动列内容已变化,重新计算滚动范围 window['buttons'].contents_changed()
核心修改:在更新隐藏子菜单的可见性后,调用window['buttons'].contents_changed(),让滚动列重新识别内部内容的高度,从而更新滚动条的可滚动范围,确保所有选项都能通过滚动访问。
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

