PySimpleGUI中用Table替换Text解决数据对齐问题求助
解决PySimpleGUI中DataFrame数据对齐问题(改用Table组件)
问题说明
使用PySimpleGUI的sg.Text组件展示DataFrame查询结果时,表头与内容无法对齐,尝试改用sg.Table组件但未成功实现,原代码依赖大量独立的Text组件逐行展示原料数据。
解决方案:改用Table组件实现对齐
Table组件原生支持列对齐,只需将DataFrame数据转换为Table要求的格式(列表的列表),配合定义好的表头即可实现完美对齐。以下是改造后的完整示例:
步骤1:适配Table的数据格式与表头
先确定表头为['序号', 'RAW MATERIAL', 'REF NO.', '%W/W'],再将DataFrame中的数据提取为二维列表,同时保留原有产品名称和流程说明部分。
步骤2:改造布局与逻辑代码
import PySimpleGUI as sg import pandas as pd # 模拟你的DataFrame查询结果(实际替换为真实数据) df = pd.DataFrame({ 'raw_name': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'], 'ref_no': ['REF-A001', 'REF-B002', 'REF-C003', 'REF-D004', 'REF-E005', 'REF-F006', 'REF-G007', 'REF-H008', 'REF-I009', 'REF-J010', 'REF-K011', 'REF-L012'], 'percentage': ['10%', '15%', '5%', '20%', '8%', '12%', '7%', '18%', '9%', '11%', '6%', '13%'] }) # 转换为Table要求的二维列表格式 table_data = [[idx+1, row['raw_name'], row['ref_no'], row['percentage']] for idx, row in df.iterrows()] # 定义Table表头 headings = ['序号', 'RAW MATERIAL', 'REF NO.', '%W/W'] # 右侧布局改造(替换原有的多行Text组件) right_col = [ [sg.Text('PRODUCT: ', size=(200, 1), key='product', font='Courier 50')], [sg.Table(values=table_data, headings=headings, key='raw_materials_table', font='Courier 12', col_widths=[5, 50, 20, 10], # 自定义列宽,适配内容长度 auto_size_columns=False, justification='left', # 列内容左对齐,保证和表头匹配 num_rows=12)], # 显示行数与原料数量一致 [sg.Text('procedure'), sg.Text(size=(20, 10), key='procedure')] ] # 完整布局(保留原左侧布局逻辑) layout = [[sg.Column(left_col, element_justification='c'), sg.VSeperator(), sg.Column(right_col)]] # 窗口运行逻辑 window = sg.Window('Product Data', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED: break # 示例:更新产品名称 window['product'].update('Sample Product X') # 示例:动态刷新Table数据(后续有新数据时调用) # new_data = [...] # 新的二维列表数据 # window['raw_materials_table'].update(values=new_data) window.close()
关键注意点
- 数据格式:必须将DataFrame每行数据转为列表,组成二维列表传入Table的
values参数 - 列宽控制:通过
col_widths手动指定列宽,搭配等宽字体(如Courier)确保对齐效果 - 动态更新:后续需要刷新数据时,直接调用
window['raw_materials_table'].update(values=新数据)即可
内容的提问来源于stack exchange,提问作者mw00847
相关产品推荐
相关产品推荐

