我构建了一个简单的工具来搜索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)