Pyqt5如何将多个类组合在一个界面显示
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章将为大家详细讲解有关Pyqt5如何将多个类组合在一个界面显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景:当你做复杂程序的时候,一个python文件不
千家信息网最后更新 2025年11月09日Pyqt5如何将多个类组合在一个界面显示
这篇文章将为大家详细讲解有关Pyqt5如何将多个类组合在一个界面显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
背景:
当你做复杂程序的时候,一个python文件不可能写完所有UI,所以我们需要分块组合,在不同的类写多个UI文件及其相应的逻辑,然后再组合在一个UI界面中。
示例如下:
1、待组合的原始主界面,主要使用控件是QTabWidget ,将不同类中的布局显示到相应tab中
# -*- coding: utf-8 -*- import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import QApplication class Ui_MainWindow(QtWidgets.QWidget): def __init__(self): super(Ui_MainWindow,self).__init__() self.setupUi() def setupUi(self): self.allLayoutV = QtWidgets.QVBoxLayout() self.allLayoutV.setContentsMargins(0, 0, 0, 0) self.allLayoutV.setObjectName("allLayoutV") self.tabWidget = QtWidgets.QTabWidget() self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.tabWidget.addTab(self.tab_3, "") self.allLayoutV.addWidget(self.tabWidget) self.retranslateUi() self.tabWidget.setCurrentIndex(0) self.setLayout(self.allLayoutV) self.show() def retranslateUi(self): _translate = QtCore.QCoreApplication.translate self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Tab 3")) if __name__ == '__main__': app = QApplication(sys.argv) ex = Ui_MainWindow() app.exit(app.exec_())分界面1
class Test(QtWidgets.QWidget): def __init__(self, parent=None): super(Test, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Test"))分界面2
class Train_Haar(QtWidgets.QWidget): def __init__(self, parent=None): super(Train_Haar, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Train_Haar"))分界面3
class Train_HOG(QtWidgets.QWidget): def __init__(self, parent=None): super(Train_HOG, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Train_HOG"))组合类最终代码
# -*- coding: utf-8 -*- import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import QApplication# 界面1class Test(QtWidgets.QWidget): def __init__(self, parent=None): super(Test, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Test")) # 界面2class Train_Haar(QtWidgets.QWidget): def __init__(self, parent=None): super(Train_Haar, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Train_Haar")) # 界面3class Train_HOG(QtWidgets.QWidget): def __init__(self, parent=None): super(Train_HOG, self).__init__(parent) # for testing lay = QtWidgets.QVBoxLayout(self) lay.addWidget(QtWidgets.QPushButton("Train_HOG")) class Ui_MainWindow(QtWidgets.QWidget): def __init__(self): super(Ui_MainWindow,self).__init__() self.setupUi() def setupUi(self): self.allLayoutV = QtWidgets.QVBoxLayout() self.allLayoutV.setContentsMargins(0, 0, 0, 0) self.allLayoutV.setObjectName("allLayoutV") self.tabWidget = QtWidgets.QTabWidget() self.tabWidget.setObjectName("tabWidget") # tab1 示例一 self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") # 创建Test类对象 test = Test() # 创建一个临时布局,用于存放从Test中获取的布局及其逻辑 lay = QtWidgets.QGridLayout() # 获取Test类中的布局及其逻辑 ''' 注意这里一定要用addWeidget方法,如果直接赋值布局的话self.tab.setLayout(test.layout()) 只能得到Test中的布局 但在Test中写的控件逻辑是不会被调用的,因为直接赋值你只获取的是布局 ''' lay.addWidget(test) # 将临时布局设定到tab上 self.tab.setLayout(lay) self.tabWidget.addTab(self.tab, "") # tab2 示例二 self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") train_Haar = Train_Haar() lay = QtWidgets.QGridLayout() lay.addWidget(train_Haar) self.tab_2.setLayout(lay) self.tabWidget.addTab(self.tab_2, "") # tab3 示例三 self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") train_Hog = Train_HOG() lay = QtWidgets.QGridLayout() lay.addWidget(train_Hog) self.tab_3.setLayout(lay) self.tabWidget.addTab(self.tab_3, "") self.allLayoutV.addWidget(self.tabWidget) self.retranslateUi() self.tabWidget.setCurrentIndex(0) self.setLayout(self.allLayoutV) self.show() def retranslateUi(self): _translate = QtCore.QCoreApplication.translate self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Tab 3")) if __name__ == '__main__': app = QApplication(sys.argv) ex = Ui_MainWindow() app.exit(app.exec_())最终效果:

总结:
这里我用QTabWidget,其实可以使用任何布局,关键代码在于addWidget,所以你可以用QGridLayout等其他布局容器都行。
# tab1 self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") # 创建Test类对象 test = Test() # 创建一个临时布局,用于存放从Test中获取的布局及其逻辑 lay = QtWidgets.QGridLayout() # 获取Test类中的布局及其逻辑 ''' 注意这里一定要用addWeidget方法,如果直接赋值布局的话self.tab.setLayout(test.layout()) 只能得到Test中的布局 但在Test中写的控件逻辑是不会被调用的,因为直接赋值你只获取的是布局 ''' lay.addWidget(test) # 将临时布局设定到tab上 self.tab.setLayout(lay)关于"Pyqt5如何将多个类组合在一个界面显示"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
布局
界面
逻辑
组合
示例
多个
控件
篇文章
代码
对象
文件
方法
更多
utf-8
不同
不错
原始
复杂
实用
关键
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于网络安全涉及到的内容
校园欺凌网络安全演讲稿
共建机制与网络安全等级
中康云服务器
数据库的管理和部署
服务器后面叹号灯亮了
上海软件开发工程考试
西安手机软件开发公司
服务器救援系统没反应
山西专业软件开发服务品质保障
网络安全攻防演练新闻通讯稿
扬州工程软件开发
阿里云数据库和账号
怎样恢复手机清理数据库
网络安全法关于造谣的内容
智慧校区软件开发
数据库插入列
如何将PG数据库数据备份
谷歌服务器域名
服务器日常维护管理
计算级奥级网络技术题库
西安手机软件开发公司
数据库和大数据中心的区别
苏联足球数据库
怎样恢复手机清理数据库
退出服务器安全狗
ibm 服务器电源线
常平网络安全管理
ios推送服务器有哪些
龙川游戏软件开发