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

如何在PySimpleGUI中创建带滚动条的多复选框固定大小界面?

解决PySimpleGUI中带滚动条的固定大小复选框区域问题

嗨,我来帮你搞定这个问题!你说得没错,sg.Column确实是实现带滚动条的固定区域的最佳方案,可能是之前没设置对关键参数导致没成功。我帮你调整了代码,不仅实现了右侧的垂直滚动条,还能让整个窗口保持固定大小,不会因为复选框数量过多被撑大。

核心思路

我们要把所有复选框统一放到一个sg.Column容器中,给这个容器开启滚动功能并设置固定尺寸,然后把这个容器加入到主布局里。同时设置窗口不可调整大小,确保界面尺寸始终稳定。

修改后的完整代码

import PySimpleGUI as sg

# 生成批量复选框(这里用30个示例,你可以根据实际需求调整数量或从数据源获取)
checkboxes = [[sg.Checkbox(f"Opción {i+1}")] for i in range(30)]

# 主布局:将复选框放在带滚动条的Column中
layout = [
    [sg.Text('<-- Enlazar Clientes con Páginas web -->')],
    [sg.Text('Dominio: '), sg.InputText()],
    [sg.Text('URL del Cliente: (con http:// o https://)'), sg.InputText()],
    [sg.Button("SELECCIONAR TODOS")],
    # 关键:带滚动条的Column,固定尺寸
    [sg.Column(
        checkboxes,
        scrollable=True,
        vertical_scroll_only=True,
        size=(450, 300),  # 调整这里的尺寸来控制滚动区域大小
        expand_y=True
    )],
    [sg.Submit('Ejecutar'), sg.Cancel('Salir')]
]

# 创建窗口,设置固定大小不可调整
window = sg.Window('Enlazador de Páginas Web', layout, resizable=False, finalize=True)

# 处理事件循环
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Salir'):
        break
    if event == "SELECCIONAR TODOS":
        # 遍历所有复选框,设置为选中状态
        for i in range(30):
            window[f"Opción {i+1}"].update(value=True)

window.close()

关键参数解释

  1. sg.Column的滚动设置:

    • scrollable=True:开启容器的滚动功能
    • vertical_scroll_only=True:只显示垂直滚动条,避免不必要的水平滚动条
    • size=(450, 300):固定滚动区域的宽高,你可以根据界面需求调整数值
    • expand_y=True:让Column在垂直方向自动填充窗口分配的空间,保证布局紧凑
  2. 窗口固定大小:

    • resizable=False:禁止用户拖动窗口边缘调整大小,确保界面尺寸始终稳定
  3. 全选按钮功能:

    • 通过window[复选框文本].update(value=True)来批量设置复选框的选中状态,如果你是动态生成的复选框,记得保持文本的一致性

这样修改后,不管你有多少个复选框,滚动区域都会保持固定大小,右侧的滚动条可以让你轻松浏览所有选项,整个窗口也不会被撑大啦!

内容的提问来源于stack exchange,提问作者thecurious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:50:57