PyQt5中处理自定义槽的手段(对于界面继承的封装)

自定义槽

由于我打算用QT编辑器来设计Qt界面,所以少不了ui转py的这一步骤。
但是每次转ui时,都会自动覆盖原来的文件,这样的话,如果需要在源文件的基础上添加自定义槽,就很麻烦了。
于是突发奇想,把界面类在逻辑代码文件里面再次继承,这样的话,ui哪怕不断的刷新,槽也不会被覆盖掉,这样就方便许多。
于是新建类来做测试:

class Test_Windows():
	def __init__(self):
		pass

由于是继承,所以要把最大的那个类给先继承下来,这里我是QtWidgets.QMainWindow:于是:

class Test_Windows(QtWidgets.QMainWindow):
	def __init__(self):
		super(Test_Windows, self).__init__()  # 记得super超人一下👀
		pass

第一种继承方法:单继承,即只继承大类

我的ui文件被我命令为hello,并且由这个方法导入:import hello,由于是用标准的ui转py的,所以会有下面这些方法:
setupUi(),retranslateUi(),以及这个类:Ui_MainWindow。这里我们只需要关注第一个方法就行,由于此方法只继承一个大类,所以我们需要在Test_Windows下,把helloUi_MainWindow给搞过来,所以:

class Test_Windows(QtWidgets.QMainWindow):
	def __init__(self):
		super(Test_Windows, self).__init__()  # 记得super超人一下👀
		self.ui=hello.Ui_MainWindow()

由于我打算在这个类里就把槽给定义好,所以还需要再加上self.ui.setupUI(self)即:

class Test_Windows(QtWidgets.QMainWindow):
	def __init__(self):
		super(Test_Windows, self).__init__()  # 记得super超人一下👀
		self.ui=hello.Ui_MainWindow()
		
		self.ui.setupUI(self)
		self.ui.pushButton.clicked.connect(lambda: print("test"))  # 这里是我的自定义信号槽
		self.ui.pushButton.clicked.connect(self.ui.lcdNumber.setHexMode)  #若要链接到内部,就用此方法(但是,如果需要链接到内部,还是建议用Qt自带的信号槽来实现

与此同时,主函数就应该是:

if __name__ == '__main__':
    # 获取UIC窗口操作权限
    app = QtWidgets.QApplication(sys.argv)

    UI = Test_Windows()
    UI.show()
	UI.ui.pushButton.clicked.connect(lambda: print("11111"))  # 如果要在主函数里面自定义的话,用此写法
    sys.exit(app.exec_())

第二种继承方法:多继承,即大小类都继承

第一种方法能用,但是需要在类里面,再次定义一个变量,而且每次都需要调用那个变量,多少显得有点麻烦,所以有了第二种方法。
第二种就是在第一种的基础上,往括号里面再加了个hello.Ui_MainWindow,即:

class Test_Windows(QtWidgets.QMainWindow,hello.Ui_MainWindow):
	def __init__(self):
		super(Test_Windows, self).__init__()  # 记得super超人一下👀

剩下的就和第一种方法大同小异了,只是不用再写一次ui罢了。

class Test_Windows(QtWidgets.QMainWindow,hello.Ui_MainWindow):
	def __init__(self):
		super(Test_Windows, self).__init__()  # 记得super超人一下👀
		#  self.ui=hello.Ui_MainWindow()  #这步就可以直接去掉
		
		self.setupUI(self)
		self.pushButton.clicked.connect(lambda: print("test"))  # 这里是我的自定义信号槽
		self.pushButton.clicked.connect(self.lcdNumber.setHexMode)  #若要链接到内部,就用此方法(但是,如果需要链接到内部,还是建议用Qt自带的信号槽来实现

if __name__ == '__main__':
    # 获取UIC窗口操作权限
    app = QtWidgets.QApplication(sys.argv)

    UI = Test_Windows()
    UI.show()
	UI.pushButton.clicked.connect(lambda: print("11111"))  # 如果要在主函数里面自定义的话,用此写法
    sys.exit(app.exec_())

本文作者:Lemon-233

本文链接:https://www.cnblogs.com/Lemon-233/p/16864765.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   柠檬233  阅读(85)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起