尽管有 pyqtSlot 装饰器,但 Slot 被调用了两次

Posted

技术标签:

【中文标题】尽管有 pyqtSlot 装饰器,但 Slot 被调用了两次【英文标题】:Slot gets called twice despite pyqtSlot decorator 【发布时间】:2016-12-03 08:37:13 【问题描述】:

这是我在 qt5 设计器中制作的一个类。当我单击按钮时,该插槽被调用了两次。

class CustomerList(QWidget, Ui_CustomerList):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setupUi(self)
        self.buttX.clicked.connect(self.on_buttX_clicked)

    @pyqtSlot()
    def on_buttX_clicked(self):
        print("on_buttX_clicked")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = CustomerList()
    w.show()

    sys.exit(app.exec_())

我在这里错过了什么?

【问题讨论】:

我对python不太了解,但也许你应该删除connect()行,因为信号是通过这个命令和名称连接的。 【参考方案1】:

您的按钮在设计器中称为buttX,因此setupUi() 中的“按名称自动连接”功能会找到匹配的插槽。

你可以

    移除显式连接 重命名按钮 重命名槽

我个人会选择后者,即使用不具有“自动名称连接”正在寻找的模式的插槽名称。 例如。 onButtXClicked

【讨论】:

以上是关于尽管有 pyqtSlot 装饰器,但 Slot 被调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要用 pyqtSlot 装饰连接的插槽?

pyqt 按钮自动绑定到 on_..._clicked 函数,无需连接或 pyqtSlot

尽管使用 @Injectable(providedIn: 'root' ) 装饰器,Angular Service 在注入组件时不充当单例

装饰器

使用 staff_member_required 装饰器,但没有被重定向到管理界面?

python 装饰器