自定义槽

由于我打算用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_())

原文地址:http://www.cnblogs.com/Lemon-233/p/16864765.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性