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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:03