从SQL表中获取文件名后,在tkinter文本字段中显示多个超链接

时间:2017-02-20 09:00:46

标签: python tkinter

我构建了一个简单的工具来搜索MySQL数据库中的文件,结果应该作为超链接显示在tkinter文本字段中。到目前为止一直很好,但每次我点击一个链接它只打开最后显示的超链接。我认为问题是在for循环已经结束后调用函数openPDF(),当调用函数openPDF(newpath)时,变量newpath具有文本字段中显示的最后一个路径的值。我不知道如何解决这个问题。

我感谢能得到的一切帮助。

erg = cursor.fetchall()

path = '\\\\path\\to\\folder\\'

for pdf in erg: 

    print 'Found files: %s\n' % pdf
    print pdf
    newpath = path + '%s' % erg[i]
    text.insert(END, pdf, hyperlink_path.add(lambda: openPDF(newpath)))
    text.insert(END, '\n')
    print pdf

超链接管理器类

from Tkinter import *

class HyperlinkManager:

    def __init__(self, text):

    self.text = text

    self.text.tag_config("hyper", foreground="blue", underline=1)

    self.text.tag_bind("hyper", "<Enter>", self._enter)
    self.text.tag_bind("hyper", "<Leave>", self._leave)
    self.text.tag_bind("hyper", "<Button-1>", self._click)

    self.reset()

def reset(self):
    self.links = {}

def add(self, action):
    # add an action to the manager.  returns tags to use in
    # associated text widget
    tag = "hyper-%d" % len(self.links)
    self.links[tag] = action
    return "hyper", tag

def _enter(self, event):
    self.text.config(cursor="hand2")

def _leave(self, event):
    self.text.config(cursor="")

def _click(self, event):
    for tag in self.text.tag_names(CURRENT):
        if tag[:6] == "hyper-":
            self.links[tag]()
            return

功能:openPDF()

def openPDF(pdf_file):

    print(pdf_file)

    if platform.system() == 'Linux':
        subprocess.call(["xdg-open", pdf_file])
    else:
        #Windows
        subprocess.Popen([pdf_file],shell=True)

0 个答案:

没有答案