PyQt5高階介面控制元件之QStackedWidget(七)
阿新 • • 發佈:2019-02-16
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)