如何使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()
关键修改说明:
- 导入webbrowser模块:用于调用系统默认浏览器打开链接
- 保留enable_click_events=True:这是捕获单元格点击事件的前提
- 添加点击事件处理逻辑:
- 当事件是Table的点击事件时,解析出点击的行和列索引
- 判断点击的是第一列(
col == 0),提取对应行的链接 - 调用
webbrowser.open()打开链接
- 动态更新兼容:每次timeout更新数据后,点击事件依然能获取最新的
dat列表中的链接,不影响功能
内容的提问来源于stack exchange,提问作者Kankan2000
相关产品推荐
相关产品推荐

