pyqt5主介面構建利器:QStackedWidget

一心獅發表於2018-11-08

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是這個東西,動手試試吧。


相關文章