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

PySimpleGUI技术求助:获取TabGroup内表格点击行的数据

PySimpleGUI表格在TabGroup中点击无响应的解决方法

问题排查

你的代码存在两个核心问题导致表格点击无响应:

  • 事件循环中window_package_table.read()的返回值未正确接收,表格的选中行信息存储在values对象中,必须同时获取event和values才能读取
  • 未处理窗口关闭事件,循环会持续阻塞,且事件逻辑覆盖不完整

另外,TabGroup的enable_events=True如果不需要监听Tab切换事件可以移除,避免不必要的事件干扰。

修复方案

  1. 修正事件循环的读取语句,正确接收event和values
  2. 针对表格点击事件,通过values[表格KEY]获取选中行的索引,再从表格原始数据中提取对应行内容并填入输入框
  3. 添加窗口关闭事件的处理逻辑,确保循环正常退出

修复后的完整代码

import PySimpleGUI as sg

# 模拟测试数据,实际使用时替换为你的真实数据
package_data_all = [["套餐1", "100", "基础版"], ["套餐2", "200", "进阶版"]]
headings_pakete = ["名称", "原价", "类型"]
sell_package_data = [["售卖套餐A", "150"], ["售卖套餐B", "250"]]
headings_sell_pakete = ["名称", "售价"]

layout_buy_package_table = [
    [
        sg.Table(
            values=package_data_all,
            headings=headings_pakete,
            max_col_width=35,
            auto_size_columns=True,
            display_row_numbers=True,
            justification="left",
            num_rows=15,
            key="-TABLE_BUY_PACKAGES-",
            row_height=30,
            background_color="#272533",
            text_color="white",
            enable_events=True
        ),
        sg.Text("Paketpreis", size=10, background_color="#272533", text_color="white", pad=(20)),
        sg.Input(size=15, key="-INDIVIDUAL_BUY_PRICE-", enable_events=True),
        sg.Button("Paket erstellen", button_color=("black", "darkorange"), size=(12, 1))
    ]
]

layout_sell_package_table = [
    [
        sg.Table(
            values=sell_package_data,
            headings=headings_sell_pakete,
            max_col_width=35,
            auto_size_columns=True,
            display_row_numbers=True,
            justification="left",
            num_rows=15,
            key="-TABLE_SELL_PACKAGES-",
            row_height=30,
            background_color="#272533",
            text_color="white",
            enable_events=True
        ),
        sg.Text("Paketpreis", size=10, background_color="#272533", text_color="white", pad=(20)),
        sg.Input(size=15, key="-INDIVIDUAL_SELL_PRICE-", enable_events=True),
        sg.Button("Paket erstellen", button_color=("black", "darkorange"), size=(12, 1))
    ]
]

tab_group_packages = [
    [
        sg.TabGroup(
            [
                [sg.Tab("Pakete - Kauforder", layout_buy_package_table, background_color="#272533")],
                [sg.Tab("Pakete Verkauforder", layout_sell_package_table, background_color="#272533")]
            ],
            tab_background_color="darkorange"
            # 移除不需要的enable_events,避免干扰表格事件
        )
    ],
    [
        sg.Button("Alle erstellen", button_color=("black", "green"), size=(20, 2)),
        sg.Button("Abbrechen", button_color=("black", "red"), size=(20, 2))
    ]
]

window_package_table = sg.Window("Paketübersicht", tab_group_packages, background_color="#272533")

while True:
    # 正确接收event和values
    event, values = window_package_table.read()
    
    # 处理窗口关闭或取消按钮事件
    if event == sg.WIN_CLOSED or event == "Abbrechen":
        break
    
    # 处理购买表格点击事件
    if event == "-TABLE_BUY_PACKAGES-":
        selected_rows = values["-TABLE_BUY_PACKAGES-"]
        if selected_rows:
            # 取第一个选中行的数据(表格默认单选,若需多选可遍历selected_rows)
            selected_data = package_data_all[selected_rows[0]]
            # 将价格列数据填入输入框
            window_package_table["-INDIVIDUAL_BUY_PRICE-"].update(selected_data[1])
            print("选中购买套餐数据:", selected_data)
    
    # 处理售卖表格点击事件
    if event == "-TABLE_SELL_PACKAGES-":
        selected_rows = values["-TABLE_SELL_PACKAGES-"]
        if selected_rows:
            selected_data = sell_package_data[selected_rows[0]]
            window_package_table["-INDIVIDUAL_SELL_PRICE-"].update(selected_data[1])
            print("选中售卖套餐数据:", selected_data)

window_package_table.close()

关键说明

  • 表格开启enable_events=True后,点击行时会触发对应KEY的事件,选中行的索引存储在values[表格KEY]中
  • 若需要支持多行选中,需在表格初始化时添加select_mode=sg.TABLE_SELECT_MODE_EXTENDED,并遍历selected_rows处理每一行数据
  • 必须处理sg.WIN_CLOSED事件,否则窗口无法正常关闭

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:06:31