gpt4 book ai didi

python - 如何为 href 指定方法名称?

转载 作者:行者123 更新时间:2023-11-30 23:15:44 24 4
gpt4 key购买 nike

我有一个 QTextBrowser() 对象:

self.PAddressLink = QTextBrowser()

我需要单击此 QTextBrowser 上的链接,它应该打开一个新对话框。

self.PAddressLink.setHtml("<html><body><a href=#>+Add Permanent Address</a></body></html>")

无论如何,我都可以使用以下代码打开新窗口:

self.PAddressLink.anchorClicked.connect(self.AddPAddress) #self.AddPAddress is the method of displaying a dialog box.

但我需要知道是否可以将 self.AddPAddress 放在 href 中并避免使用以下额外语句:

self.PAddressLink.anchorClicked.connect(self.AddPAddress) #self.AddPAddress 

最佳答案

假设所有方法都定义在同一个对象上(例如 self),您可以在 href 属性中设置方法名称:

self.PAddressLink.setHtml('<a href="AddPAddress">...</a>')
self.PAddressLink.anchorClicked.connect(self.handleLink)

然后使用 getattr调用方法:

def handleLink(self, url):
if url.scheme():
# handle normal urls here if necessary...
else:
getattr(self, url.toString())()
<小时/>

这是使用 QLabelQTextBrowser 的完整演示:

screenshot

from PyQt5 import QtCore, QtGui, QtWidgets

html = """
<p><a href="https://www.google.com">Url Link</a></p>
<p><a href="myMethod">Method Link</a></p>
"""

class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel(html)
self.browser = QtWidgets.QTextBrowser()
self.browser.setOpenLinks(False)
self.browser.setHtml(html)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.browser)
layout.addWidget(self.label)
self.label.linkActivated.connect(self.handleLink)
self.browser.anchorClicked.connect(self.handleLink)

def handleLink(self, url):
url = QtCore.QUrl(url)
if url.scheme():
# handle real urls
QtGui.QDesktopServices.openUrl(url)
else:
# handle methods
getattr(self, url.toString())()

def myMethod(self):
QtWidgets.QMessageBox.information(self, 'Test', 'Hello World!')

if __name__ == '__main__':

app = QtWidgets.QApplication(['Test'])
window = Window()
window.setGeometry(600, 100, 300, 200)
window.show()
app.exec()

关于python - 如何为 href 指定方法名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com