Tkinter Text 小部件中的超链接?

9 投票
2 回答
7554 浏览
提问于 2025-04-16 02:16

我正在重新设计我当前软件项目的一部分,想用超链接来代替按钮。其实我不太想用文本这个组件,但在网上搜索时只找到这个。总之,我找到了一个例子,但总是出现这个错误:

TclError: bitmap "blue" not defined

当我在IDLE中添加这行代码时

hyperlink = tkHyperlinkManager.HyperlinkManager(text)

这个模块的代码可以在这里找到,而脚本的代码可以在这里找到。

有没有人有什么想法?

出问题的部分是foreground="blue",这在Tkinter中是指颜色,对吧?

2 个回答

1

其实,"blue" 是可以用的(因为你在用Windows,Tkinter应该会使用它自带的颜色名称表——在X11上可能是系统配置有问题,但在Windows上应该没事);所以这个问题有点让人困惑(可能是Tkinter的配置问题...?)。那么,如果你试试用 foreground="#00F" 呢?虽然这不能解决问题,但至少可能让你找到一个替代的方法...

13

如果你不想用文本小部件,其实可以不使用。你可以选择用一个标签,并把鼠标点击事件绑定到这个标签上。虽然它是个标签,但它依然能响应事件。

举个例子:

import tkinter as tk

class App:
    def __init__(self, root):
        self.root = root
        for text in ("link1", "link2", "link3"):
            link = tk.Label(text=text, foreground="#0000ff")
            link.bind("<1>", lambda event, text=text: self.click_link(event, text))
            link.pack()

    def click_link(self, event, text):
        print("You clicked '%s'" % text)

root = tk.Tk()
app = App(root)
root.mainloop()

如果你愿意,还可以更花哨一点,给标签添加额外的绑定,比如 <Enter><Leave> 事件,这样当用户把鼠标悬停在上面时,可以改变标签的外观。当然,你也可以选择改变字体,让文字变成下划线。

Tk 是一个很棒的工具包,它提供了你几乎所有想要的构建模块。你只需要把小部件看作是一堆木材、砖块和水泥,而不是一套预制的墙和门。

撰写回答