【转】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 的滑动条进行设置。



浙公网安备 33010602011771号