pyqt5主介面構建利器:QStackedWidget
QStackedWidget介紹
QT裡面,有一個控制元件QStackedWidget,叫做堆載視窗控制元件。
這個控制元件,很有用,用起來也很簡單。但可能正因為太簡單,不管書裡,還是網上的文章裡,都很少提到這個控制元件。
我學了很長一段時間的pyqt5,都沒有注意到這個控制元件。直到看了QT大神劉典武的分享,才知道原來QT還有一個這麼強大的控制元件。感謝劉典武大神。
那麼,這個控制元件有什麼用呢?其實,他是構建主介面的強大利器,完全可以拿來構建商業型軟體。
哎,不知道為什麼就沒人著重分享講解這個QStackedWidget控制元件,害我當時走了不少彎路。這真的是一個很重要很強大的控制元件呀。
好了,我們來看下吧。
示例圖片
完整程式碼
【如下程式碼,完全複製,直接執行,即可使用】
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
################################################
#######建立主視窗
################################################
class FirstMainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle(`主介面`)
###### 建立介面 ######
self.centralwidget = QWidget()
self.setCentralWidget(self.centralwidget)
self.Layout = QVBoxLayout(self.centralwidget)
# 設定頂部三個按鈕
self.topwidget = QWidget()
self.Layout.addWidget(self.topwidget)
self.buttonLayout = QHBoxLayout(self.topwidget)
self.pushButton1 = QPushButton()
self.pushButton1.setText("第一皮膚")
self.buttonLayout.addWidget(self.pushButton1)
self.pushButton2 = QPushButton()
self.pushButton2.setText("第二皮膚")
self.buttonLayout.addWidget(self.pushButton2)
self.pushButton3 = QPushButton()
self.pushButton3.setText("第三皮膚")
self.buttonLayout.addWidget(self.pushButton3)
# 設定stackedWidget
self.stackedWidget = QStackedWidget()
self.Layout.addWidget(self.stackedWidget)
# 設定第一個皮膚
self.form1 = QWidget()
self.formLayout1 = QHBoxLayout(self.form1)
self.label1 = QLabel()
self.label1.setText("第一個皮膚,哈哈哈!")
self.label1.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label1.setAlignment(Qt.AlignCenter)
self.label1.setFont(QFont("Roman times", 50, QFont.Bold))
self.formLayout1.addWidget(self.label1)
# 設定第二個皮膚
self.form2 = QWidget()
self.formLayout2 = QHBoxLayout(self.form2)
self.label2 = QLabel()
self.label2.setText("第二個皮膚,哼哼哼!")
self.label2.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label2.setAlignment(Qt.AlignCenter)
self.label2.setFont(QFont("Roman times", 50, QFont.Bold))
self.formLayout2.addWidget(self.label2)
# 設定第三個皮膚
self.form3 = QWidget()
self.formLayout3 = QHBoxLayout(self.form3)
self.label3 = QLabel()
self.label3.setText("第三個皮膚,哄哄哄!")
self.label3.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.label3.setAlignment(Qt.AlignCenter)
self.label3.setFont(QFont("Roman times", 50, QFont.Bold))
self.formLayout3.addWidget(self.label3)
# 將三個皮膚,加入stackedWidget
self.stackedWidget.addWidget(self.form1)
self.stackedWidget.addWidget(self.form2)
self.stackedWidget.addWidget(self.form3)
# 設定狀態列
self.statusBar().showMessage("當前使用者:一心獅")
# 視窗最大化
self.showMaximized()
###### 三個按鈕事件 ######
self.pushButton1.clicked.connect(self.on_pushButton1_clicked)
self.pushButton2.clicked.connect(self.on_pushButton2_clicked)
self.pushButton3.clicked.connect(self.on_pushButton3_clicked)
# 按鈕一:開啟第一個皮膚
def on_pushButton1_clicked(self):
self.stackedWidget.setCurrentIndex(0)
# 按鈕二:開啟第二個皮膚
def on_pushButton2_clicked(self):
self.stackedWidget.setCurrentIndex(1)
# 按鈕三:開啟第三個皮膚
def on_pushButton3_clicked(self):
self.stackedWidget.setCurrentIndex(2)
################################################
#######程式入門
################################################
if __name__ == "__main__":
app = QApplication(sys.argv)
the_mainwindow = FirstMainWindow()
the_mainwindow.show()
sys.exit(app.exec_())
實戰說明
實際開發中,做介面設計,當然一般是藉助Qt designer,方便而高效。
在Qt designer,QStackedWidget是這個東西,動手試試吧。
相關文章
- 淺談C#字串構建利器StringBuilderC#字串UI
- 主建構函式有啥用函式
- apache虛擬web主機構建ApacheWeb
- Express 實戰(六):構建 API 介面ExpressAPI
- Spring Boot 整合 Swagger 構建介面文件Spring BootSwagger
- Orleans - 1 .NET生態構建分散式系統的利器分散式
- 用 Docker 構建 MySQL 主從環境DockerMySql
- Centos 7 構建虛擬Web主機CentOSWeb
- [譯] 構建流暢的互動介面
- 為任意螢幕尺寸構建 Android 介面Android
- 關於scala中的主建構函式函式
- 用抽象工廠方法構建 Flutter 主題抽象Flutter
- docker&flask快速構建服務介面(二)DockerFlask
- 使用 JWT 構建基本的 Api 登入介面JWTAPI
- 使用PyQt5為YoloV5新增介面(一)QTYOLO
- 在Flask中構建API介面的相關概念FlaskAPI
- Kotlin 主建構函式引數的修飾符Kotlin函式
- C#12中的Primary Constructors(主建構函式)C#Struct函式
- pyqt5建立主視窗(介紹視窗型別)QT型別
- 好用的API介面,開發效率的利器API
- 利用IDisposable介面構建包含非託管資源物件物件
- 用Flutter構建漂亮的UI介面 - 基礎元件篇FlutterUI元件
- Android入門教程 | 使用 ConstraintLayout 構建自適應介面AndroidAI
- [PyQt5]一個後臺工程師的介面情結QT工程師
- 深入理解介面隔離原則:構建靈活的面向介面軟體
- 原始碼解析.Net中Host主機的構建過程原始碼
- 開發者利器:免費好用的api介面API
- 免費好用的api介面,開發者利器API
- Kotlin實戰:使用DSL構建結構化API去掉冗餘的介面方法KotlinAPI
- 基於 Ionic 2 多主題、多租戶構建方案探索
- 構建高效系統:必備熱門API介面集合的推薦API
- 構建高效能的介面模組需要注意的幾點
- API管理平臺,構建企業統一介面管理API
- 98.css:構建類似於 Windows 98 的介面的CSS庫CSSWindows
- SRE 排障利器,介面請求超時試試 httpstatHTTP
- 大型網站架構利器-CDN技術網站架構
- Rainbond ubuntu20.04單主機(allinone)部署及簡單應用構建AIUbuntuNone
- “內迴圈”:構建內需主導的新經濟(附下載)