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

PySimpleGUI设置expand_x=True时Table列异常问题及解决咨询

PySimpleGUI Table组件expand_x=True时列显示异常问题分析与解决

问题描述

实现一列按钮与Table组件的并列布局,当为Table设置expand_x=True时,表格列出现显示异常。

原代码

import PySimpleGUI as sg
from PySimpleGUI import *

supporting_table_names: list[str] = [
    "Accounts",
    "Merchants",
    "Locations",
    "Tags",
    "Budgets",
    "Statements",
]

layout: list[list[Element]] = [
    [
        sg.Column(
            list(
                [[sg.Button(name, key=f"-{name}-")] for name in supporting_table_names]
            ),
        ),
        sg.Table(
            values=[
                ["test1", "test1", "test2"],
                ["test2", "test2", "test2"],
                ["test3", "test3", "test3"],
            ],
            headings=["temp", "temp", "temp"],
            expand_x=True,
            auto_size_columns=True,
        ),
    ]
]

window: Window = sg.Window(
    title="Test Program",
    layout=layout,
    size=(1000, 500),
    resizable=True,
)

event, values = window.read()

异常原因

  • auto_size_columns=True与expand_x=True逻辑冲突:auto_size_columns会根据单元格内容自动计算列宽,expand_x=True会让Table占满剩余水平空间,PySimpleGUI同时启用这两个参数时,列宽分配算法会出现异常,导致列被挤压或显示错位。
  • 左侧按钮Column无布局约束:窗口调整时,按钮列宽度会无规则变化,进一步干扰Table的列宽计算逻辑。

解决方法(实现Table双向扩展且正常显示)

布局调整与参数设置

  1. 给左侧按钮Column添加expand_y=True,让按钮列垂直占满窗口,同时设置vertical_alignment='top'保持按钮居上,避免窗口调整时按钮列被不合理拉伸。
  2. 调整Table参数:
    • 保留expand_x=True并添加expand_y=True,实现x、y方向双向扩展;
    • 移除auto_size_columns=True,改用col_widths手动设置初始列宽,配合justification确保内容对齐;
    • 可选添加vertical_scroll_only=False,确保窗口缩小时滚动条正常显示。

修改后的代码

import PySimpleGUI as sg

supporting_table_names: list[str] = [
    "Accounts",
    "Merchants",
    "Locations",
    "Tags",
    "Budgets",
    "Statements",
]

layout: list[list[sg.Element]] = [
    [
        sg.Column(
            [[sg.Button(name, key=f"-{name}-")] for name in supporting_table_names],
            expand_y=True,
            vertical_alignment='top'
        ),
        sg.Table(
            values=[
                ["test1", "test1", "test2"],
                ["test2", "test2", "test2"],
                ["test3", "test3", "test3"],
            ],
            headings=["temp", "temp", "temp"],
            expand_x=True,
            expand_y=True,
            col_widths=[10, 10, 10],
            justification='left',
            vertical_scroll_only=False
        ),
    ]
]

window: sg.Window = sg.Window(
    title="Test Program",
    layout=layout,
    size=(1000, 500),
    resizable=True,
)

event, values = window.read()
window.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:47:01