我正在学习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())
答案 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”,那么您就可以了