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

如何使PySimpleGUI动态更新表格中的超链接可点击?

实现PySimpleGUI表格第一列的可点击超链接

PySimpleGUI的Table组件本身不原生支持超链接,但可以通过监听单元格点击事件,配合系统浏览器实现点击跳转功能。以下是修改后的完整代码:

import PySimpleGUI as sg
import webbrowser


def getData():
    # 模拟周期性更新的数据,首元素为网站链接
    return [("https://www.google.com", "Google", "10", "5445", "No"),
            ("https://www.yahoo.com", "yahoo", "2", "333", "Yes")]

dat = getData()
headings = ["Link", "Name", "Users", "Id", "Authorized"]

sg.set_options(dpi_awareness=True)
layout = [
    [sg.Table(values=dat, headings=headings, max_col_width=25,
              auto_size_columns=True,
              justification='right',
              num_rows=20,
              alternating_row_color=sg.theme_button_color()[1],
              key='-TABLE-',
              expand_x=True,
              expand_y=True,
              enable_click_events=True,  # 必须开启这个才能捕获单元格点击事件
              )],
]
window = sg.Window('Table Element - Example 1', layout, resizable=True, finalize=True)

while True:
    dat = getData()  # 获取最新数据
    event, values = window.read(timeout=1000)
    
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    elif event == sg.TIMEOUT_KEY:
        window['-TABLE-'].update(values=dat)
        window.refresh()
    # 处理表格单元格点击事件
    elif isinstance(event, tuple) and event[0] == '-TABLE-' and event[1] == '+CLICKED+':
        row, col = event[2]
        # 只处理第一列的点击
        if col == 0:
            link = dat[row][0]
            webbrowser.open(link)

window.close()

关键修改说明:

  1. 导入webbrowser模块:用于调用系统默认浏览器打开链接
  2. 保留enable_click_events=True:这是捕获单元格点击事件的前提
  3. 添加点击事件处理逻辑:
    • 当事件是Table的点击事件时,解析出点击的行和列索引
    • 判断点击的是第一列(col == 0),提取对应行的链接
    • 调用webbrowser.open()打开链接
  4. 动态更新兼容:每次timeout更新数据后,点击事件依然能获取最新的dat列表中的链接,不影响功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:57:39