将字符串自动转换为指向pdf文档的链接

时间:2016-02-23 02:45:06

标签: string python-3.x pdf tkinter

我已经在这里和互联网上做了一些调查,它看起来并不是很明显,但我的问题是可以使用tkinter python自动将文本字符串转换为从某个方向加载pdf的链接

e.g。数据'12345问题A'在文本小部件中弹出,并自动转换为单击时打开pdf文档的链接。

这可以或不可以吗?

在这种情况下,我希望能够点击1931-125,699-126和1851-127,并且每个都打开一个同名的pdf文件。这是在制造环境中使用,允许汇编程序单击字段并拥有构建特定项目所需的所有文档

enter image description here

1 个答案:

答案 0 :(得分:0)

首先要将格式应用于文本窗口小部件的部分,您需要了解tags,在大多数情况下,您可以只使用链接的短语(ABC123),只需记住:

  

标记的名称可以是任何不包含空格或句点的字符串。

一旦你有链接的标签,有两个部分:

  1. 将标签格式化为外观和反应链接。
  2. 将标记应用于文本中的短语。
  3. 第一个非常简单,如果你只想让它变成蓝色并加下划线并回复被点击:

    def format_link(text_widget,tag,command):
        text_widget.tag_config(tag,foreground="blue",underline=1)
        text_widget.tag_bind(tag,"<Button-1>",command)#remember that the command will need to take an event argument
    

    如果你希望光标在悬停时改变,或者在点击等后改变颜色,这可能会变得更复杂。

    第二部分是将此标记应用于文本自动,我假设这意味着在将文本插入窗口小部件后解析文本。通过将this answer置于循环中以便检查短语的每次出现,这也非常简单:

    def apply_tag(text_widget,phrase,tag,regexp=False):
        countVar = tk.IntVar(text_widge)
        idx = "1.0"
        while idx:
            idx = text_widget.search(phrase,idx, stopindex = "end",
                                     count = countVar, regexp = regexp)
            if idx:
                end_idx = "%s + %sc" %(idx, countVar.get())
                text_widget.tag_add(tag, idx, end_idx)
                idx = end_idx
    

    然后剩下的就是定义在另一个程序中打开文件然后调用上述两个函数的方法,使用os.system("open"...)打开文件,它可以简单如下:

    def make_link(text,phrase,file_to_open):
        def callback(event=None):
            os.system("open %r"%file_to_open)#there are better ways of handling this
        apply_tag(text,phrase,phrase)#uses phrase as tag
        format_link(text,phrase,callback)
    

    虽然您可能希望查看answers hereit's duplicate以了解打开文件的替代方法。

    将文本插入窗口小部件后,假设您有某种短语列表可以转换为链接,您可以循环显示这些短语并为每个短语调用make_link

    phrases = {"1931-125", "699-126", "1851-127"}
    
    for s in phrases:
        make_link(TEXT_W, s, s+".pdf") #make a link to same name with .pdf added to end.