1. 程式人生 > >PyQt5高階介面控制元件之QStackedWidget(七)

PyQt5高階介面控制元件之QStackedWidget(七)

QStackedWidget

前言

QTackedWidget是一個堆疊視窗控制元件,可以填充一些小控制元件,但是同一時間只有一個小控制元件可以顯示,QStackedWidget使用QStackedLayout佈局。QSTackedWidget控制元件與QTabWidget類似,可以有效的顯示視窗的控制元件

例項:QStackedWidget的使用

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class StackedExample
(QWidget):
def __init__(self): super(StackedExample, self).__init__() #設定視窗初始位置和大小 self.setGeometry(300,50,10,10) self.setWindowTitle('StackedWidget 例子') #建立列表視窗,新增條目 self.leftlist=QListWidget() self.leftlist.insertItem(0,'聯絡方式') self.leftlist.insertItem(1
,'個人資訊') self.leftlist.insertItem(2,'教育程度') #建立三個小控制元件 self.stack1=QWidget() self.stack2=QWidget() self.stack3=QWidget() self.stack1UI() self.stack2UI() self.stack3UI() #在QStackedWidget物件中填充了三個子控制元件 self.stack=QStackedWidget(self) self.stack.addWidget(self.stack1) self.stack.addWidget(self.stack2) self.stack.addWidget(self.stack3) #水平佈局,新增部件到佈局中
HBox=QHBoxLayout() HBox.addWidget(self.leftlist) HBox.addWidget(self.stack) self.setLayout(HBox) self.leftlist.currentRowChanged.connect(self.display) def stack1UI(self): layout=QFormLayout() layout.addRow('姓名',QLineEdit()) layout.addRow('地址',QLineEdit()) self.stack1.setLayout(layout) def stack2UI(self): # zhu表單佈局,次水平佈局 layout = QFormLayout() sex = QHBoxLayout() # 水平佈局新增單選按鈕 sex.addWidget(QRadioButton('男')) sex.addWidget(QRadioButton('女')) # 表單佈局新增控制元件 layout.addRow(QLabel('性別'), sex) layout.addRow('生日', QLineEdit()) self.stack2.setLayout(layout) def stack3UI(self): # 水平佈局 layout = QHBoxLayout() # 新增控制元件到佈局中 layout.addWidget(QLabel('科目')) layout.addWidget(QCheckBox('物理')) layout.addWidget(QCheckBox('高數')) self.stack3.setLayout(layout) def display(self,i): #設定當前可見的選項卡的索引 self.stack.setCurrentIndex(i) if __name__ == '__main__': app=QApplication(sys.argv) demo=StackedExample() demo.show() sys.exit(app.exec_())

執行效果如圖
這裡寫圖片描述這裡寫圖片描述這裡寫圖片描述

程式碼分析

在這個例子中,在QStackedWidget物件中填充了三個子控制元件

        self.stack1=QWidget()
        self.stack2=QWidget()
        self.stack3=QWidget()

        #在QStackedWidget物件中填充了三個子控制元件
        self.stack=QStackedWidget(self)

        self.stack.addWidget(self.stack1)
        self.stack.addWidget(self.stack2)
        self.stack.addWidget(self.stack3)

每個子控制元件都可以有自己的佈局,包含特定的表單元素,QStackedWidget控制元件不能在頁面之間進行切換,它與當前選中的QListWidget控制元件中的選項進行連線

        #建立列表視窗,新增條目
        self.leftlist=QListWidget()
        self.leftlist.insertItem(0,'聯絡方式')
        self.leftlist.insertItem(1,'個人資訊')
        self.leftlist.insertItem(2,'教育程度')
        self.leftlist.currentRowChanged.connect(self.display)

將QListWidget的currentRowChanged訊號與display()槽函式相關聯,從而改變堆疊控制元件的檢視

   def display(self,i):
        #設定當前可見的選項卡的索引
        self.stack.setCurrentIndex(i)

相關檔案及下載地址