我写了一个模仿搜索引擎的python程序,这一段是前端输出的主要内容:
urls = []
cnt = 0
for num, docscore in sortedlist:
try:
cnt = cnt + 1
c.execute('select link from doc where id=?', (num,)) # 根据num的值在doc表中找到相对应的网址链接
url = c.fetchall()[0][0] # 得到具体链接的字符串
print('\n')
print(url, ' 排名分:', format(docscore, '.3f'), ' 序号:', cnt) # 输出网址和得分
urls.append(url)
except:
cnt = cnt - 1
continue
“输出网址和得分”那一行是最主要的输出。(同时这段代码是搜索功能相关代码usesearch中的一段)
现在的输出是这样的,输出在了textbrowser上:
可以看到链接是白色不可点击的,我textbrowser的openlinks和openexternallinks都设置为true。。。。。。
这是main函数里的点击事件:
def beclicked1(self):
self.textBrowser.clear()
kwd = self.search_input.text()
usesearch(kwd)
urlss = usesearch(kwd)
作用是点击“搜索一下”按钮时将用户输在框里的词传到搜索功能相关的代码里并启动,然后“输出网址和得分”输出到前端的webbrowser上。
在usesearch里,我新建了数组urls用来保存出现的链接,最终我return了urls,现在在main函数里我引用了usesearch并将urls赋值给了urlss,接下来我就不知道该怎么弄了。我想让链接可直接点击,同时不破坏“输出网址和得分”那样的格式,换句话说就是让它们在原本的位置上可直接点击。
你可以在 textbrowser
中使用 setOpenExternalLinks(True)
方法来设置链接可点击。
代码可以参考下面的:
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QTextBrowser
# 创建一个文本浏览器
text_browser = QTextBrowser()
# 设置文本浏览器中的链接可点击
text_browser.setOpenExternalLinks(True)
# 在循环中添加链接
for num, docscore in sortedlist:
try:
cnt = cnt + 1
c.execute('select link from doc where id=?', (num,))
url = c.fetchall()[0][0]
text_cursor = text_browser.textCursor()
# 使用 insertHtml 方法插入带有链接的文本
text_cursor.insertHtml(f'<a href="{url}">{url}</a> 排名分:{format(docscore, ".3f")} 序号:{cnt}<br>')
except:
cnt = cnt - 1
continue
还有别忘了需要在文本中插入 HTML 标签来创建链接。