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

时间:2018-09-24 05:09:13

标签: python pyqt pyqt5

我正在学习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())

2 个答案:

答案 0 :(得分:0)

插槽属于所使用的类,它们返回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_())

答案 1 :(得分:0)

尝试一下

从PyQt5导入QtWidget,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”,那么您就可以了