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

如何在PySimpleGUI表格单元格中嵌入ProgressBar组件?

在PySimpleGUI表格中嵌入真实进度条的解决方案

首先明确:PySimpleGUI的sg.Table组件底层基于Tkinter的Treeview,而Treeview的单元格仅支持文本或图片,无法直接嵌入ProgressBar这类复杂控件。不过可以通过以下替代方案实现类似效果:

替代方案:用Frame模拟表格布局

用sg.Frame作为容器,每行单独布局文本和ProgressBar,模拟表格的视觉效果,这样每个进度条都是真实的可交互组件。

示例代码

import PySimpleGUI as sg

# 定义每行的布局:文本 + 进度条
def create_row(item_name, progress):
    return sg.Frame('', [
        [sg.Text(item_name, size=(10,1)), sg.ProgressBar(100, orientation='h', size=(20,15), key=f'prog_{item_name}')]
    ], pad=(0,0))

# 初始化10个对象的进度数据
items = [f"对象{i+1}" for i in range(10)]
initial_progress = [20*(i+1) for i in range(10)]

# 构建整体布局
layout = [
    [sg.Text("处理对象状态", font=('Arial', 12, 'bold'))],
    [create_row(item, prog) for item, prog in zip(items, initial_progress)],
    [sg.Button("更新进度"), sg.Button("退出")]
]

window = sg.Window("对象进度监控", layout, finalize=True)

# 初始化进度条值
for item, prog in zip(items, initial_progress):
    window[f'prog_{item}'].update(prog)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "退出":
        break
    if event == "更新进度":
        # 模拟进度推进
        for i, item in enumerate(items):
            new_prog = min(100, initial_progress[i] + 5)
            initial_progress[i] = new_prog
            window[f'prog_{item}'].update(new_prog)

window.close()

方案优势

  • 每个进度条都是真实的sg.ProgressBar组件,支持动态更新
  • 布局灵活,可根据需求调整每行的元素样式和尺寸
  • 实现简单,无需复杂的自定义渲染逻辑

其他说明

如果一定要用sg.Table组件,只能通过ASCII条或自定义Canvas绘制进度条(需要深入操作Tkinter底层),但后者实现成本高,不如Frame模拟方案实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:39:34