Tkinter Text小部件中的超链接?

时间:2010-08-04 02:12:03

标签: python windows tkinter hyperlink

我正在设计当前软件项目的一部分,并希望使用超链接而不是Buttons。我真的不想使用Text小部件,但这是我搜索主题时能找到的全部内容。无论如何,我找到了一个这样的例子,但不断收到这个错误:

TclError: bitmap "blue" not defined

当我添加这行代码时(使用IDLE

hyperlink = tkHyperlinkManager.HyperlinkManager(text)

该模块的代码位于here,脚本代码位于here

有人有什么想法吗?

提出问题的部分是foreground="blue",在Tkinter中被称为颜色,不是吗?

2 个答案:

答案 0 :(得分: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是一个很棒的工具包,可以为您提供构建基础,以满足您的需求。您只需要将小部件视为一组预制的墙壁和门,而不仅仅是一堆腰部,砖块和砂浆。

答案 1 :(得分:1)

确实应该接受

"blue"(因为你在Windows上,Tkinter应该使用它的内置颜色名称表 - 它可能是X11上的系统配置错误,但不是Windows上的系统配置错误);因此,这是一个令人费解的问题(可能是Tkinter错误配置......?)。例如,如果您使用foreground="#00F"会发生什么?这并没有解释问题,但可能让你解决它,至少......