PySimpleGUI中sg.Column滚动失效求助:添加元素后滚动未激活
修复PySimpleGUI中Column扩展后滚动不激活的问题
问题根源是使用extend_layout添加元素后,Column组件不会自动检测内部内容的尺寸变化,导致滚动条无法触发。只需在每次添加元素后调用Column的contents_changed()方法,强制它重新计算内容尺寸,就能激活滚动功能。
修改后的完整代码:
import PySimpleGUI as sg new_layout = [[sg.T(f'Row 1'), sg.B(' + ', key='-ADD-')]] layout = [[sg.T('Example Text')], [sg.Column(new_layout, key='-Column-', size=(100, 200), scrollable=True, vertical_scroll_only=True)]] window = sg.Window('For Example', layout) def new_row(row_amt): return [[sg.T(f'Row {row_amt}')]] row_amt = 2 while True: event, values = window.read() if event in (sg.WIN_CLOSED, None): break elif event == '-ADD-': window.extend_layout(window['-Column-'], new_row(row_amt)) # 触发Column重新计算内容尺寸,激活滚动条 window['-Column-'].contents_changed() row_amt += 1
补充说明
extend_layout仅负责向Column中插入新元素,但不会主动更新Column的内部尺寸缓存。调用contents_changed()后,Column会重新测量所有子元素的总高度,当总高度超过你设置的Columnsize参数中的高度值时,滚动条就会自动激活并正常工作。
内容的提问来源于stack exchange,提问作者antjuice
相关产品推荐
相关产品推荐

