You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:52:08