我是PyQt5的初学者,请原谅我的无知
我试着把一个按钮和我定义的函数连接起来
import sys
from PyQt5 import QtGui, QtWidgets,uic
def PrintSomething ():
print("Hello world")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = uic.loadUi("Auto.ui")
window.show()
sys.exit(app.exec_())
为了完成上述操作,我使用QtDesigner在主窗口中添加了一个插槽,如图所示,然后我将按钮的按下信号与主窗口的插槽连接起来
当我尝试运行应用程序时,遇到以下错误:
AttributeError:“QMainWindow”对象没有属性“PrintSomething”
我做错什么了?在
更新:
我也用过这个代码
^{pr2}$其中Auto模块是通过pyuic5生成的,并添加了PrintSomething()函数。这也会导致错误
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(667, 487)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(300, 380, 95, 29))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 667, 23))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
self.menuExit = QtWidgets.QMenu(self.menubar)
self.menuExit.setObjectName("menuExit")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionSave = QtWidgets.QAction(MainWindow)
self.actionSave.setObjectName("actionSave")
self.actionClose = QtWidgets.QAction(MainWindow)
self.actionClose.setObjectName("actionClose")
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionSave)
self.menuFile.addAction(self.actionClose)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuExit.menuAction())
self.retranslateUi(MainWindow)
self.pushButton.pressed.connect(MainWindow.PrintSomething())
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.menuExit.setTitle(_translate("MainWindow", "Exit"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionSave.setText(_translate("MainWindow", "Save"))
self.actionClose.setText(_translate("MainWindow", "Close"))
def PrintSomething ():
print("Hello world")
您需要像这样重新构造代码:
但是,我认为最好是在代码中连接信号,而不是通过Qt Designer来完成:
^{pr2}$如果您更改了
PrintSomething
插槽的名称,或者想将按钮连接到另一个插槽,那么通过Qt Designer更改它会非常麻烦。在开发应用程序时,信号连接可能会经常更改,因此手动编码可能更易于管理。在编辑:
另一个添加到问题中的例子也可以用类似的方法解决。但是如果您要使用
pyuic
,您应该永远不要编辑它生成的模块。相反,您应该简单地将其导入主脚本,如下所示:相关问题 更多 >
编程相关推荐