如何给href一个方法名?

Posted

技术标签:

【中文标题】如何给href一个方法名?【英文标题】:How to give a method name to href? 【发布时间】:2015-01-26 07:40:25 【问题描述】:

我有一个 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 

【问题讨论】:

【参考方案1】:

你可以(有点)以一种有点老套的方式做到这一点。

本质上,您希望将链接视为按钮并让每个链接调用不同的处理程序。因此,假设所有处理程序都定义在同一个对象上(例如self),您可以执行以下操作:

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

    def handleLinkClicked(self, url):
        if url.host():
            # handle normal urls here if necessary...
        else:
            getattr(self, url.toString())()

或者只是:

        else:
            key = url.toString()
            if key == 'AddPAddress':
                # open dialog...
            elif key == 'SomethingElse':
                # do something else...

【讨论】:

【参考方案2】:

很可能不会。至少没有任何简单的方法。您很可能只是重新实现信号和插槽系统。

就像按钮一样,您必须将点击信号连接到插槽。它就是这样设计的。

【讨论】:

如果我需要在单个 QTextBrowser 中使用多个链接,那我将不得不使用多个 QTextBrowser 怎么办? anchorClicked 信号将 url 传递给 slot,因此您可以让 self.AddPAddress 以不同方式处理 url。

以上是关于如何给href一个方法名?的主要内容,如果未能解决你的问题,请参考以下文章

python深浅拷贝以及数据在内存中储存方法

如何给多参数接口添加缓存(根据方法名字+参数名生成对应的key)

如何给多参数接口添加缓存(根据方法名字+参数名生成对应的key)

如何给多参数接口添加缓存(根据方法名字+参数名生成对应的key)

IT轮子系列——如何显示方法名——Swagger的使用

2016.1.22总结(方法)