【问题标题】:AttributeError: 'builtin_function_or_method' object has no attribute 'connect'AttributeError:“builtin_function_or_method”对象没有属性“connect”
【发布时间】:2017-12-25 21:56:19
【问题描述】:

我正在使用基于 PyQt4 的 PyQt。我正在使用 PyCharm 2017.3。我的python版本是3.4。
我正在尝试连接我们单击鼠标以从 QLineEdit 捕获内容时获得的信号。

class HelloWorld(QMainWindow, tD_ui.Ui_MainWindow):

    # defining constructor
    def __init__(self):

        QMainWindow.__init__(self)

        self.setupUi(self)
        self.getContent()
        self.putValues()
        self.setWindowTitle("Downloader")
        self.pushButton.mousePressEvent.connect(self.getContent)


所以当我运行代码时。出现以下错误

Traceback (most recent call last):
  File "C:/Project/Downloader/Implement.py", line 113, in <module>
    helloworld = HelloWorld()
  File "C:/Project/Downloader/Implement.py", line 18, in __init__
    self.pushButton.mousePressEvent.connect(self.getContent)
AttributeError: 'builtin_function_or_method' object has no attribute 'connect' 

P.S->请尽量避免解决方案中的遗留代码

【问题讨论】:

    标签: python pyqt pyqt4 qt-signals qt-slot


    【解决方案1】:

    mousePressEvent 不是一个信号,所以你不应该使用 connect,你应该使用 clicked 信号:

    self.pushButton.clicked.connect(self.getContent)
    

    加:

    在Qt中,因此对于PyQt来说,有信号和事件,发出信号并且必须覆盖事件,在按钮的情况下,被点击的任务是自然的并且在其逻辑中是固有的,所以这个信号已经被创建了,但是如果 QLabel 没有该信号,但我们可以使用 mousePressEvent 事件来生成该信号,如下所示:

    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class Label(QLabel):
        clicked = pyqtSignal()
        def mousePressEvent(self, event):
            self.clicked.emit()
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        w = Label("click me")
        w.clicked.connect(lambda: print("clicked"))
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 您的解决方案有效。谢谢。我无法理解 mousePressEvent 与 clicked 有何不同。它保留用于什么功能?
    猜你喜欢
    • 2018-11-29
    • 2018-03-27
    • 2020-11-27
    • 2016-01-31
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多