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
下,把hello
的Ui_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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步