如何在PySimpleGUI中创建可滚动列实现左右分栏布局
PySimpleGUI 双栏布局(左滚动右固定)实现说明
首先明确你的核心疑问:普通sg.Frame本身默认不带滚动能力,也不会自动出现滚动条。你不需要手动编写滚动条的交互逻辑,只要用PySimpleGUI提供的可滚动容器配置对应参数,内部元素超出容器尺寸时滚动条会自动显示。
实现思路
你要的左右分栏布局可以按以下逻辑实现:
- 窗口整体采用1行2列的布局结构,左栏放可滚动容器,右栏放固定内容
- 可滚动区域优先用
sg.Column组件,开启scrollable参数即可获得滚动能力,不需要额外引入其他组件 - 要是需要保留Frame的边框/标题效果,把可滚动Column放在Frame内部即可
可运行示例代码
import PySimpleGUI as sg # 模拟左侧菜单的大量元素 left_menu_content = [[sg.Button(f"菜单选项{i}", size=(20, 2))] for i in range(25)] # 左侧可滚动区域:设置固定尺寸,开启滚动 left_area = sg.Column( left_menu_content, scrollable=True, vertical_scroll_only=True, # 仅保留垂直滚动,不需要横向可以开这个 size=(220, 600), # 必须显式设置容器尺寸,内容超出后滚动条才会自动出现 key="-LEFT_SCROLL-" ) # 右侧固定区域 right_area = sg.Column( [ [sg.Text("右侧固定展示区", font=("微软雅黑", 15))], [sg.Multiline(size=(60, 30), disabled=True, default_text="该区域内容不会随左侧滚动移动")], [sg.Button("提交"), sg.Button("关闭")] ], size=(700, 600) ) # 如果你需要给左侧加Frame的标题/边框,就这么写 # left_area = sg.Frame( # "功能菜单", # [[sg.Column(left_menu_content, scrollable=True, vertical_scroll_only=True, size=(200, 570))]], # size=(220, 600) # ) # 整体布局 layout = [[left_area, right_area]] window = sg.Window("双栏布局演示", layout, resizable=False) while True: event, values = window.read() if event in (sg.WINDOW_CLOSED, "关闭"): break window.close()
注意事项
- 必须给可滚动
sg.Column设置固定size参数,如果没有固定尺寸,容器会默认完全撑开容纳所有内部元素,滚动条永远不会触发 - 如果需要横向滚动,把
vertical_scroll_only参数改为False即可 - 滚动条的显示、滚动交互逻辑都是PySimpleGUI内置实现的,不需要你额外写代码处理
内容的提问来源于stack exchange,提问作者user13524876
相关产品推荐
相关产品推荐

