【转】PyQt4 精彩实例分析 实例 13 多文档

在使用 QMainWindow 作为主窗口时,经常会用到多文档的方式对文件进行显示,本实例通过一个简单的例子
分析如何实现多文档的布局方式。实例效果图如下。

Qt 提供了一个 QWorkspace 类,利用 QWorkspace 类可以很方便地实现多文档的应用。QWorkspace 类继
承自 QWidget 类,因此只需在 QMainWindow 主窗口中把 QWorkspace 对象设置为中央窗体即
可。QWorkspace 类提供了许多对子窗口进行排序的函数接口,如 cascade(),arrangeIcon(),title()
等。

实现代码如下:

 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 MainDialog(QMainWindow):
11     def __init__(self, parent=None):
12         super(MainDialog, self).__init__(parent)
13         self.setWindowTitle("Multiple Document window")
14         self.CreateWindows()
15         self.CreateMenu()
16         self.ConnectSignalSlot()
17         self.SlotScroll()
18 
19     def CreateWindows(self):
20         self.workSpace = QWorkspace()
21 
22         self.window_0 = QMainWindow()
23         self.window_0.setWindowTitle("window 0")
24         self.textEdit_0 = QTextEdit(self.tr("window 0"))
25         self.window_0.setCentralWidget(self.textEdit_0)
26 
27         self.window_1 = QMainWindow()
28         self.window_1.setWindowTitle("window 1")
29         self.textEdit_1 = QTextEdit(self.tr("window 1"))
30         self.window_1.setCentralWidget(self.textEdit_1)
31 
32         self.window_2 = QMainWindow()
33         self.window_2.setWindowTitle("window 2")
34         self.textEdit_2 = QTextEdit(self.tr("window 2"))
35         self.window_2.setCentralWidget(self.textEdit_2)
36 
37         self.setCentralWidget(self.workSpace)
38         self.workSpace.addWindow(self.window_0)
39         self.workSpace.addWindow(self.window_1)
40         self.workSpace.addWindow(self.window_2)
41 
42     def CreateMenu(self):
43         self.layoutMenu = self.menuBar().addMenu(self.tr("Layout"))
44         self.arrange = QAction(self.tr("Arrange Icons"), self)
45         self.layoutMenu.addAction(self.arrange)
46         
47         self.tile = QAction(self.tr("Tile"), self)
48         self.layoutMenu.addAction(self.tile)
49 
50         self.cascade = QAction(self.tr("Cascade"), self)
51         self.layoutMenu.addAction(self.cascade)
52 
53         self.scroll = QAction(self.tr("Scroll"), self)
54         self.layoutMenu.addAction(self.scroll)
55 
56         self.next = QAction(self.tr("Next"), self)
57         self.layoutMenu.addAction(self.next)
58 
59         self.previous = QAction(self.tr("Previous"), self)
60         self.layoutMenu.addAction(self.previous)
61 
62     def ConnectSignalSlot(self):
63         self.connect(self.arrange, SIGNAL("triggered()"), self.workSpace, SLOT("arrangeIcons()"))
64         self.connect(self.tile, SIGNAL("triggered()"), self.workSpace, SLOT("tile()"))
65         self.connect(self.cascade, SIGNAL("triggered()"), self.workSpace, SLOT("cascade()"))
66         self.connect(self.scroll, SIGNAL("triggered()"), self.SlotScroll)
67         self.connect(self.next, SIGNAL("triggered()"), self.workSpace, SLOT("activateNextWindow()"))
68         self.connect(self.previous, SIGNAL("triggered()"), self.workSpace, SLOT("activatePreviousWindow()"))
69 
70     def SlotScroll(self):
71         self.workSpace.setScrollBarsEnabled(not self.workSpace.scrollBarsEnabled())
72 
73 
74 def main():
75     app = QApplication(sys.argv)
76     mainWindow = MainDialog()
77     mainWindow.show()
78     app.exec_()
79     
80 if __name__ == '__main__':
81     main()

SlotScroll()槽函数完成对多文档空间 QWorkspace 的滑动条进行设置。

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