【转】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 配合使用。

浙公网安备 33010602011771号