【转】PyQt4 精彩实例分析 实例 16 堆栈窗口

本实例实现一个堆栈窗体的使用,实现效果图如下所示。

选择左侧列表框不同的选项,右侧则显示所选的窗体。

实现代码如下:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 from PyQt4.QtGui import *
 5 from PyQt4.QtCore import *
 6 import sys
 7 
 8 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
 9 
10 class StackDialog(QDialog):
11     def __init__(self, parent=None):
12         super(StackDialog,self).__init__(parent)
13         self.setWindowTitle(self.tr("Stack Window"))
14         
15         listWidget = QListWidget()
16         listWidget.insertItem(0, self.tr("window 0"))
17         listWidget.insertItem(1, self.tr("window 1"))
18         listWidget.insertItem(2, self.tr("window 2"))
19 
20         label1 = QLabel(self.tr("This is window 0!"))
21         label2 = QLabel(self.tr("This is window 1!"))
22         label3 = QLabel(self.tr("This is window 2!"))
23 
24         stack = QStackedWidget()
25         stack.addWidget(label1)
26         stack.addWidget(label2)
27         stack.addWidget(label3)
28 
29         mainLayout = QHBoxLayout(self)
30         mainLayout.setMargin(5)
31         mainLayout.setSpacing(5)
32         mainLayout.addWidget(listWidget)
33         mainLayout.addWidget(stack, 0, Qt.AlignHCenter)
34         mainLayout.setStretchFactor(listWidget,1)
35         mainLayout.setStretchFactor(stack,3)
36 
37         self.connect(listWidget,SIGNAL("currentRowChanged(int)"),stack,SLOT("setCurrentIndex(int)"))
38 
39 def main():
40     app = QApplication(sys.argv)
41     main = StackDialog()
42     main.show()
43     app.exec_()
44     
45 if __name__ == '__main__':
46     main()

第 15-18 行创建一个 QListWidget 控件,并在控件中插入 3 个条目,作为选择项。

第 20-22 行创建 3 个 QLabel 标签控件,作为堆栈窗口显示的三层窗体。

第 24 行创建一个 QStackedWidget 堆栈窗。

第 25-27 行调用 addWidget()方法把前面创建的 3 个标签控件依次插入堆栈窗中。

第 29-35 行使用 QHBoxLayout 对整个对话框进行布局。

第 37 行连接 QListWidget 的 currentRowChanged()信号与堆栈窗的 setCurrentIndex()槽,实现按
选择显示窗体。此处的堆栈窗体 index 按插入的顺序从 0 起依次排序,与 QListWidget 的条目排序相一
致。

本实例分析了堆栈窗的基本使用方法。在实际应用中,堆栈窗口多与列表框 QListWidget 及下拉列表框
QComboBox 配合使用。

posted @ 2014-11-18 11:58  jakey.chen  阅读(564)  评论(0)    收藏  举报