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双向扩展且正常显示)
布局调整与参数设置
- 给左侧按钮Column添加
expand_y=True,让按钮列垂直占满窗口,同时设置vertical_alignment='top'保持按钮居上,避免窗口调整时按钮列被不合理拉伸。 - 调整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
相关产品推荐
相关产品推荐

