堆疊窗口QStackedWidget


 

經常將QStackedWidget和QListWidget或者QListView搭配使用

 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QWidget, QStackedWidget, QLabel, QLineEdit, QDateEdit, \
 3     QComboBox, QTextEdit, QListWidget, QGridLayout, QHBoxLayout
 4 
 5 class Demo(QWidget):
 6     def __init__(self):
 7         super(Demo, self).__init__()
 8         self.stack1 = QWidget() #實例化一個窗口
 9         self.stack2 = QWidget()
10         self.stack3 = QTextEdit()
11 
12         self.stack1_init()
13         self.stack2_init()
14 
15         self.stacked_widget = QStackedWidget(self) # 創建一個堆疊窗口【虛擬窗口】
16         self.stacked_widget.addWidget(self.stack1) #給堆疊窗口添加子窗口或子控件
17         self.stacked_widget.addWidget(self.stack2)
18         self.stacked_widget.addWidget(self.stack3)
19         self.stacked_widget.currentChanged.connect(lambda: print(self.stacked_widget.currentIndex()))
20         #堆疊窗口發生變化時,都會觸發信號
21         #self.stacked_widget.currentIndex()返回堆疊窗口序列號
22 
23         self.list_widget = QListWidget(self) #創建列表控件--用來放標簽項
24         self.list_widget.addItem('Basic Info') #在列表控件中添加標簽項。參數:標簽顯示文本
25         self.list_widget.addItem('Contact Info')
26         self.list_widget.addItem('More Info')
27         self.list_widget.clicked.connect(self.change_func) #單擊列表控件時觸發信號
28 
29         self.h_layout = QHBoxLayout()
30         self.h_layout.addWidget(self.list_widget)
31         self.h_layout.addWidget(self.stacked_widget)
32 
33         self.setLayout(self.h_layout)
34 
35     def stack1_init(self):
36         name_label = QLabel('姓名:', self.stack1)
37         gender_label = QLabel('性別:', self.stack1)
38         bd_label = QLabel('出生日期:', self.stack1)
39 
40         name_line = QLineEdit(self.stack1)
41         items = ['請選擇性別', '', '']
42         gender_combo = QComboBox(self.stack1)
43         gender_combo.addItems(items)
44         bd_dateedit = QDateEdit(self.stack1)
45 
46         g_layout = QGridLayout()
47         g_layout.addWidget(name_label, 0, 0, 1, 1)
48         g_layout.addWidget(name_line, 0, 1, 1, 1)
49         g_layout.addWidget(gender_label, 2, 0, 1, 1)
50         g_layout.addWidget(gender_combo, 2, 1, 1, 1)
51         g_layout.addWidget(bd_label, 3, 0, 1, 1)
52         g_layout.addWidget(bd_dateedit, 3, 1, 1, 1)
53 
54         self.stack1.setLayout(g_layout)
55 
56     def stack2_init(self):
57         tel_label = QLabel('Tel:', self.stack2)
58         mobile_label = QLabel('Mobile:', self.stack2)
59         add_label = QLabel('Address:', self.stack2)
60 
61         tel_line = QLineEdit(self.stack2)
62         mobile_line = QLineEdit(self.stack2)
63         add_line = QLineEdit(self.stack2)
64 
65         g_layout = QGridLayout()
66         g_layout.addWidget(tel_label, 0, 0, 1, 1)
67         g_layout.addWidget(tel_line, 0, 1, 1, 1)
68         g_layout.addWidget(mobile_label, 1, 0, 1, 1)
69         g_layout.addWidget(mobile_line, 1, 1, 1, 1)
70         g_layout.addWidget(add_label, 2, 0, 1, 1)
71         g_layout.addWidget(add_line, 2, 1, 1, 1)
72 
73         self.stack2.setLayout(g_layout)
74 
75     def change_func(self):
76         self.stacked_widget.setCurrentIndex(self.list_widget.currentIndex().row())
77         #設置堆疊窗口顯示指定索引的窗口
78         #self.list_widget.currentIndex().row() 返回當前列表選中項的索引號
79 
80 if __name__ == '__main__':
81     app = QApplication(sys.argv)
82     demo = Demo()
83     demo.show()
84     sys.exit(app.exec_())

 

樣式:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM