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是這個東西,動手試試吧。
相關文章
- 構建利器Lisp的創作環境Lisp
- 利用KEEPALIVED構建mysql主主複製MySql
- 淺談C#字串構建利器StringBuilderC#字串UI
- 如何構建你的聊天介面
- 前端任務構建利器Gulp.js使用指南前端JS
- apache虛擬web主機構建ApacheWeb
- 主建構函式有啥用函式
- Express 實戰(六):構建 API 介面ExpressAPI
- Orleans - 1 .NET生態構建分散式系統的利器分散式
- 用 Docker 構建 MySQL 主從環境DockerMySql
- Centos 7 構建虛擬Web主機CentOSWeb
- [譯] 構建流暢的互動介面
- 使用PyQt5為YoloV5新增介面(一)QTYOLO
- 用抽象工廠方法構建 Flutter 主題抽象Flutter
- 關於scala中的主建構函式函式
- 為任意螢幕尺寸構建 Android 介面Android
- docker&flask快速構建服務介面(二)DockerFlask
- 使用 JWT 構建基本的 Api 登入介面JWTAPI
- ZZFLEX-介面構建從未如此簡單Flex
- 利用OpenVSwitch構建多主機Docker網路Docker
- 開發者利器:免費好用的api介面API
- 免費好用的api介面,開發者利器API
- Spring Boot 整合 Swagger 構建介面文件Spring BootSwagger
- 在Flask中構建API介面的相關概念FlaskAPI
- 構建微服務-使用OAuth 2.0保護API介面微服務OAuthAPI
- pyqt5建立主視窗(介紹視窗型別)QT型別
- 好用的API介面,開發效率的利器API
- 用Flutter構建漂亮的UI介面 - 基礎元件篇FlutterUI元件
- [譯] 如何理智地構建複雜使用者介面
- 深入理解介面隔離原則:構建靈活的面向介面軟體
- [PyQt5]一個後臺工程師的介面情結QT工程師
- 原始碼解析.Net中Host主機的構建過程原始碼
- Kotlin 主建構函式引數的修飾符Kotlin函式
- C#12中的Primary Constructors(主建構函式)C#Struct函式
- mysql5.6利用GTIDs構建主從資料庫MySql資料庫
- C#程式設計利器之三:介面(Interface)C#程式設計
- 利用IDisposable介面構建包含非託管資源物件物件
- OpenStack主機列表介面