python GUI庫圖形介面開發之PyQt5窗口布局控制元件QStackedWidget詳細使用方法
阿新 • • 發佈:2020-02-28
PyQt5窗口布局控制元件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.currentRowChanged.connect(self.display)
將QListWidget的currentRowChanged訊號與display()槽函式相關聯,從而改變堆疊控制元件的檢視
def display(self,i): #設定當前可見的選項卡的索引 self.stack.setCurrentIndex(i)
實際開發中,做介面設計,當然一般是藉助Qt designer,方便而高效。
在Qt designer,QStackedWidget是上圖這個東西,動手試試吧。
本文詳細介紹了PyQt5窗口布局控制元件QStackedWidget使用方法,靈活使用QStackedWidget控制元件對你的專案會有很大的提升,更多關於PyQt5窗口布局控制元件QStackedWidget使用方法請檢視下面的相關連結