qtDesigner中设计自定义的信号与槽时面临的困境(Pyqt5)
通过qtDesigner设计的自定义槽函数,在编译之后,根本没有;执行Ui_XXX.py文件是,会报出来未定义XXX槽函数的错误
之前设计的软件中,Ui_XXX.py文件中有没有DIYSlot()呢?
答案是没有。
要想使用DIYSlot()
首先要创建一个新的class,比如MyClass()
MyClass()要继承,Ui_XXX,同时还要继承QMainWindow(必须继承QMainWindow,因为Ui_XXX.py中的setupUi()函数接收的参数必须是QMainWindow类);
语法为:
MyClass(QMainWindow, Ui_XXX):
继承之后,MyClass的构造函数要继承父类QMainWindow的构造函数
语法为:
super(子类,self).__init__(参数1,参数2,....)
super(MyClass, self).__init__()
还有一种经典写法:
父类名称.__init__(self,参数1,参数2,...)
然后补充以下的内容:
if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) # MainWindow = QtWidgets.QMainWindow() ui = myWindow()#创建了一个QMainwidow的类,里边包含了DIYSlot()的方法 ui.setupUi(ui)#调用了Ui_XXX中的方法,把控件都放了进去 ui.show()#使用QMainwidow类中自带的show方法,把窗口显示了出来 # ui.setupUi(MainWindow) # MainWindow.show() sys.exit(app.exec_())
关于python中类的继承的知识点
请参考:https://www.runoob.com/w3cnote/python-extends-init.html
完成了!
---------
如何让每个控件发送自定义的信号呢?