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

 

完成了!

 

 

---------

如何让每个控件发送自定义的信号呢?

 

 

 

posted @ 2020-03-04 15:45  bH1pJ  阅读(133)  评论(0编辑  收藏  举报