首页 > 解决方案 > 在 PySimpleGUI 中,如何在文本字段中添加超链接?

问题描述

我正在创建一个基于此Youtube 教程的搜索引擎,它在 sg.Output 元素中提供搜索结果的输出。我希望每个结果都可以单击并在 Windows 文件资源管理器中打开并选择文件。

我的问题在 PySimpleGUI 输出框 (sg.Output) 中,我似乎只能有文本。

我怎样才能获得带有链接的文本来运行这样的子进程?我的猜测是类似于这里讨论的内容:

sg.Text('Here', is_link=True, key='link') # then link the key to an event

但是,如前所述,如果我向 sg.Output 添加除文本以外的任何内容,则它不起作用,即以下内容不起作用:

sg.window.FindElement('-OUTPUT-').Update(sg.Text('Here', is_link=True, key='link')) 

标签: pythonpysimplegui

解决方案


sg.Output为or启用超链接功能将非常复杂sg.Multiline

这是为 提供超链接功能的简单代码sg.Text,也适用于其他一些元素,通过使用选项enable_events=Truetooltip.

在此处输入图像描述

import webbrowser
import PySimpleGUI as sg

urls = {
    'Google':'https://www.google.com',
    'Amazon':'https://www.amazon.com/',
    'NASA'  :'https://www.nasa.gov/',
    'Python':'https://www.python.org/',
}

items = sorted(urls.keys())

sg.theme("DarkBlue")
font = ('Courier New', 16, 'underline')

layout = [[sg.Text(txt, tooltip=urls[txt], enable_events=True, font=font,
    key=f'URL {urls[txt]}')] for txt in items]
window = sg.Window('Hyperlink', layout, size=(250, 150), finalize=True)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event.startswith("URL "):
        url = event.split(' ')[1]
        webbrowser.open(url)
    print(event, values)

window.close()

推荐阅读