pyqt5,接收 AttributeError:“QMainWindow”对象没有属性“browseSlot”

Posted

技术标签:

【中文标题】pyqt5,接收 AttributeError:“QMainWindow”对象没有属性“browseSlot”【英文标题】:pyqt5, Receiving AttributeError: 'QMainWindow' object has no attribute 'browseSlot' 【发布时间】:2018-09-24 05:09:13 【问题描述】:

我正在学习 pyqt5,特别是如何将它与 QT Designer 一起使用。我有点关注 HERE 的教程。但是在本教程中,他们使用 pyuic5 将 XML 接口转换为 Python 代码,而我尝试使用 uic.loadUi("myui.ui") 动态导入它。在本教程中,我们使用名为“browseSlot”的信号和槽编辑器定义了一个槽。 当我尝试运行/编译时,在

dlg = uic.loadUi("myui.ui")

我得到错误:

AttributeError: 'QMainWindow' 对象没有属性 'browseSlot'

我认为发生的事情是 QT Designer 将信号连接到插槽“browseSlot”,但由于 myui.ui 中未定义“browseSlot”方法,因此引发错误,因为没有办法解释器知道我指的是 UI 界面文件之外的方法。 (在这种情况下,在加载接口的模块中)。据我所知,QT Designer 只允许我将信号连接到插槽,而不是定义一个全新的插槽。我认为在其他框架中处理这种情况的方式是会有一个需要覆盖的抽象方法。那么在这种情况下我该怎么做才能让它发挥作用呢?

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import QObject, pyqtSlot
import sys

app = QtWidgets.QApplication([])
dlg = uic.loadUi("myui.ui")

@pyqtSlot
def returnPressedSlot():
    pass
@pyqtSlot
def writeDocSlot():
    pass
@pyQt
def browseSlot():
    pass

dlg.show()
sys.exit(app.exec())

【问题讨论】:

【参考方案1】:

插槽属于使用的类返回loadUi(),它们不是任何函数,因为它们不会神奇地不连接它们,如果你想使用loadUi()并实现这些方法,你必须从对应的类继承到您使用的模板,在链接示例中使用了主窗口,因此它必须继承自 QMainWindow:

from PyQt5 import QtCore, QtGui, QtWidgets, uic


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi("mainwindow.ui", self)

    @QtCore.pyqtSlot()
    def returnPressedSlot():
        pass

    @QtCore.pyqtSlot()
    def writeDocSlot():
        pass

    @QtCore.pyqtSlot()
    def browseSlot():
        pass


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

【讨论】:

【参考方案2】:

试试这个

from PyQt5 import QtWidgets, uic

app = QtWidgets.QApplication([])

form = uic.loadUi("login.ui")

form2.show()

app.exec()

只要你安装了 PyQt5 和 PyQt5-tools,上面的 python 代码应该可以正确显示你的 gui 应用程序,如果你还没有打开 CMD 并输入enter code here"pip install PyQt5" 然后点击 enter.once 安装完成输入“pip install PyQt5-tools”然后你就可以开始了

【讨论】:

以上是关于pyqt5,接收 AttributeError:“QMainWindow”对象没有属性“browseSlot”的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 和 QML 集成问题,“findChild”返回 AttributeError

AttributeError:“列表”对象没有属性“barh”

PyQt5:使用 QObject 和 QThread 时出现 AttributeError

AttributeError:模块 'sipbuild.api' 没有 PyQt5 5.15.0 的属性 'prepare_metadata_for_build_wheel'

pyqt5 报错AttributeError: 'MyWindow' object has no attribute 'config_ui'?

AttributeError:“QWheelEvent”对象没有属性“delta”