我正在学习 pyqt5,特别是如何将它与 QT Designer 一起使用。我有点遵循教程HERE 。然而,在本教程中,他们使用 pyuic5 将 XML 接口(interface)转换为 Python 代码,而我尝试使用 uic.loadUi("myui.ui") 动态导入它。在本教程中,我们使用名为“browseSlot”的信号和槽编辑器定义一个槽。 当我尝试运行/编译时,在
行dlg = uic.loadUi("myui.ui")
我收到错误:
AttributeError: 'QMainWindow' object has no attribute 'browseSlot'
我认为发生的事情是 QT Designer 将信号连接到插槽“browseSlot”,但由于 myui.ui 中未定义“browseSlot”方法,因此抛出错误,因为没有办法解释器知道我指的是 UI 界面文件之外的方法。 (在本例中,在加载接口(interface)的模块中)。据我所知,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())
最佳答案
属于所使用的类的插槽返回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_())
关于python - pyqt5,接收属性错误: 'QMainWindow' object has no attribute 'browseSlot' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52472975/