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

String 将字符串自动转换为pdf文档的链接,string,python-3.x,pdf,tkinter,String,Python 3.x,Pdf,Tkinter,我已经在这里和互联网上做了一些调查,这似乎不是非常明显,但我的问题是,使用tkinter的python能否用于自动将文本字符串转换为从某个方向加载pdf的链接 e、 g.数据“12345问题A”在文本小部件中弹出,并自动转换为一个链接,单击该链接可打开pdf文档 这能做到还是不能做到 在本例中,我希望能够单击1931-125、699-126和1851-127,让它们各自打开一个同名的pdf文件。这是在制造环境中使用的,允许组装人员单击字段并拥有构建特定项目所需的所有文档 首先,要对文本小部件的某

我已经在这里和互联网上做了一些调查,这似乎不是非常明显,但我的问题是,使用tkinter的python能否用于自动将文本字符串转换为从某个方向加载pdf的链接

e、 g.数据“12345问题A”在文本小部件中弹出,并自动转换为一个链接,单击该链接可打开pdf文档

这能做到还是不能做到

在本例中,我希望能够单击1931-125、699-126和1851-127,让它们各自打开一个同名的pdf文件。这是在制造环境中使用的,允许组装人员单击字段并拥有构建特定项目所需的所有文档


首先,要对文本小部件的某些部分应用格式,您需要了解,在大多数情况下,您可能只需要使用链接的短语(ABC123),请记住:

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

一旦您有了链接的标记,就有两个部分:

  • 格式化标记,使其外观和反应类似于链接
  • 将标记应用于文本中的短语
  • 如果你只想让它变成蓝色,加上下划线,并对被点击做出反应,那么第一个选项非常简单:

    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
    

    然后剩下的就是定义在另一个程序中打开文件的方法,然后调用上述两个函数,使用
    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)
    
    尽管您可能希望查看或寻找打开文件的替代方法


    在将文本插入小部件后,假设您有一些短语列表可以转换为链接,您只需在短语上循环,并为每个短语调用
    make\u 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.
    

    这取决于你对“自动”的定义。你必须编写代码来实现它,但是文本小部件当然有可能有打开其他程序的链接。这完全没关系,我只是不想走这条路,如果这是不可能的,或者模块不可用……我是一个新手,所以我的目标是可以实现的:)这个方法允许你吗(通过代码修改)将文本转换为可点击的文本,文本名称保持不变,但现在它指向特定的位置和文件名?例如,我的“结果”文本小部件给我ABC123,我希望它现在显示为ABC123(但现在可点击)当点击时,它会在计算机上的某个目录中查找文件ABC123,在本例中是ABC.pdf-希望这能让老师重新回答这个问题,并在将来尽量避免不必要的冗长或复杂的答案。我知道这是对一个老问题的回答(与我们的第二个孩子离开了一段时间),我只是想验证上面的内容是否适用于文本小部件中的多行,每行都有不同的文本。我添加了一个程序的屏幕截图,这可能有助于实现我的目标。我希望标记第一行1931-125,并将其与一个名为相同名称的pdf文件关联,该文件位于一个目录中,然后我希望o重复第二行699-126等。目的是一个人可以点击每一系列的数字并打开不同的pdf文档。当然,只要调用
    make_link
    就可以创建每个链接,如果有帮助的话,我会在末尾加一点。谢谢:)用你的短语code-phrases={“1931-125”、“699-126”、“1851-127”,可以用字符串代替硬编码的数字吗?原因是“作业x”与“作业y”会有不同的图纸,如果我有几百个作业,每个作业都有不同的图纸,那么需要进行大量的维护。我设想,当我的csv行被读入(与所有相关的图纸信息)时,这些图纸编号被存储为字符串,然后用作短语-如果这是最好的方法。
    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.