人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Pyqt5將多個類組合在一個界面顯示的完整示例

發(fā)布日期:2022-01-28 18:18 | 文章來源:腳本之家

背景:

當你做復(fù)雜程序的時候,一個python文件不可能寫完所有UI,所以我們需要分塊組合,在不同的類寫多個UI文件及其相應(yīng)的邏輯,然后再組合在一個UI界面中。

示例如下:

1、待組合的原始主界面,主要使用控件是QTabWidget ,將不同類中的布局顯示到相應(yīng)tab中

# -*- coding: utf-8 -*-
 
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from 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 sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
# 界面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"))
 
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")
  # 創(chuàng)建Test類對象
  test = Test()
  # 創(chuàng)建一個臨時布局,用于存放從Test中獲取的布局及其邏輯
  lay = QtWidgets.QGridLayout()
  # 獲取Test類中的布局及其邏輯
  ''' 注意這里一定要用addWeidget方法,如果直接賦值布局的話self.tab.setLayout(test.layout()) 只能得到Test中的布局
但在Test中寫的控件邏輯是不會被調(diào)用的,因為直接賦值你只獲取的是布局
  '''
  lay.addWidget(test)
  # 將臨時布局設(shè)定到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_())

最終效果:

總結(jié):

這里我用QTabWidget,其實可以使用任何布局,關(guān)鍵代碼在于addWidget,所以你可以用QGridLayout等其他布局容器都行。

  # tab1
  self.tab = QtWidgets.QWidget()
  self.tab.setObjectName("tab")
  # 創(chuàng)建Test類對象
  test = Test()
  # 創(chuàng)建一個臨時布局,用于存放從Test中獲取的布局及其邏輯
  lay = QtWidgets.QGridLayout()
  # 獲取Test類中的布局及其邏輯
  ''' 注意這里一定要用addWeidget方法,如果直接賦值布局的話self.tab.setLayout(test.layout()) 只能得到Test中的布局
但在Test中寫的控件邏輯是不會被調(diào)用的,因為直接賦值你只獲取的是布局
  '''
  lay.addWidget(test)
  # 將臨時布局設(shè)定到tab上
  self.tab.setLayout(lay)

參考:python - Compose a PyQt5 UI from multiple classes - Stack Overflow

到此這篇關(guān)于Pyqt5將多個類組合在一個界面顯示的文章就介紹到這了,更多相關(guān)Pyqt5多個類組合在界面顯示內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

國外服務(wù)器租用

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部