PyQt4 精彩实例分析* 实例13 多文档
2013-09-18 16:27
323 查看
在使用QMainWindow作为主窗口时,经常会用到多文档的方式对文件进行显示,本实例通过一个简单的例子分析如何实现多文档的布局方式。实例效果图如下。
Qt提供了一个QWorkspace类,利用QWorkspace类可以很方便地实现多文档的应用。QWorkspace类继承自QWidget类,因此只需在QMainWindow主窗口中把QWorkspace对象设置为中央窗体即可。QWorkspace类提供了许多对子窗口进行排序的函数接口,如cascade(),arrangeIcon(),title()等。
实现代码如下:
slotScroll()槽函数完成对多文档空间QWorkspace的滑动条进行设置。
第12行创建了一个QWorkspace对象。
第13行设置主窗口的中央窗体为QWorkspace对象,以使主窗口能实现多文档的布局方式。
createMenu()函数创建主窗口的菜单栏
第15-26行新建三个子窗口用于在主窗口中显示。
第28-30行在workSpace中插入这些子窗口,即实现了多文档的显示。
第37-39行实现对子窗口的arrangeIcons布局,它的布局方式是将所有子窗口以标题栏的方式在主窗口的底部进行排列,如下图所示。可直接把菜单的triggered()信号与QWorkspace对象的arrangeIcons()方法相连。
注意此排列方式,仅对已经最小化的子窗口起作用。
第41-43行实现子窗口的tile布局,tile的意思是用子窗口把主窗口像铺瓦片或贴瓷砖一样排满,如下图所示,可直接连接QWorkspace对象的tile()函数实现。
第45-47行实现对子窗口的cascade布局,即子窗口的层叠显示,如下图所示,可直接连接QWorkspace对象的cascade()函数实现。
第55-57行使下一个子窗口获得焦点,成为当前应用子窗口,直接把菜单项与QWorkspace对象的activateNextWindow()函数连接实现。
第59-61行使前一个子窗口获得焦点,成为当前应用子窗口,直接把菜单项与QWorkspace对象的activatePreviousWindow()函数连接实现。
子窗口的顺序由QWorkspace的WindowOrder属性决定,有以下两种可能的顺序。
QWorkspace.CreationOrder:子窗口创建的先后顺序。
QWorkspace.StackingOrder:子窗口堆栈的顺序,即处于最上方的子窗口是最后一个子窗口。
其中,CreationOrder是默认的子窗口顺序。
当调用windowList()函数获得主窗口的所有子窗口列表时,以WindowOrder作为参数,返回的子窗口列表即以指明的顺序进行排列。
第64行通过QWorkspace的setScrollBarsEnabled()函数,可对workSpace滑动条的可用性进行设置。
注:本文基本上是经过改编的《Linux窗口程序设计--Qt4精彩实例分析》一书的PyQt4 for windows版本
转自:http://blog.csdn.net/chumpklutz/article/details/6073828
Qt提供了一个QWorkspace类,利用QWorkspace类可以很方便地实现多文档的应用。QWorkspace类继承自QWidget类,因此只需在QMainWindow主窗口中把QWorkspace对象设置为中央窗体即可。QWorkspace类提供了许多对子窗口进行排序的函数接口,如cascade(),arrangeIcon(),title()等。
实现代码如下:
# -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class MainWidget(QMainWindow): def __init__(self,parent=None): super(MainWidget,self).__init__(parent) self.setWindowTitle(self.tr("多文档窗口")) self.workSpace=QWorkspace() self.setCentralWidget(self.workSpace) window1=QMainWindow() window1.setWindowTitle(self.tr("窗口1")) edit1=QTextEdit(self.tr("子窗口1")) window1.setCentralWidget(edit1) window2=QMainWindow() window2.setWindowTitle(self.tr("窗口2")) edit2=QTextEdit(self.tr("子窗口2")) window2.setCentralWidget(edit2) window3=QMainWindow() window3.setWindowTitle(self.tr("窗口3")) edit3=QTextEdit(self.tr("子窗口3")) window3.setCentralWidget(edit3) self.workSpace.addWindow(window1) self.workSpace.addWindow(window2) self.workSpace.addWindow(window3) self.createMenu() self.slotScroll() def createMenu(self): layoutMenu=self.menuBar().addMenu(self.tr("布局")) arrange=QAction(self.tr("排列图标"),self) self.connect(arrange,SIGNAL("triggered()"),self.workSpace,SLOT("arrangeIcons()")) layoutMenu.addAction(arrange) tile=QAction(self.tr("平铺"),self) self.connect(tile,SIGNAL("triggered()"),self.workSpace,SLOT("tile()")) layoutMenu.addAction(tile) cascade=QAction(self.tr("层叠"),self) self.connect(cascade,SIGNAL("triggered()"),self.workSpace,SLOT("cascade()")) layoutMenu.addAction(cascade) otherMenu=self.menuBar().addMenu(self.tr("其它")) scrollAct=QAction(self.tr("滚动"),self) self.connect(scrollAct,SIGNAL("triggered()"),self.slotScroll) otherMenu.addAction(scrollAct) otherMenu.addSeparator() nextAct=QAction(self.tr("下一个"),self) self.connect(nextAct,SIGNAL("triggered()"),self.workSpace,SLOT("activateNextWindow()")) otherMenu.addAction(nextAct) previousAct=QAction(self.tr("上一个"),self) self.connect(previousAct,SIGNAL("triggered()"),self.workSpace,SLOT("activatePreviousWindow()")) otherMenu.addAction(previousAct) def slotScroll(self): self.workSpace.setScrollBarsEnabled(not self.workSpace.scrollBarsEnabled()) app=QApplication(sys.argv) main=MainWidget() main.show() app.exec_()
slotScroll()槽函数完成对多文档空间QWorkspace的滑动条进行设置。
第12行创建了一个QWorkspace对象。
第13行设置主窗口的中央窗体为QWorkspace对象,以使主窗口能实现多文档的布局方式。
createMenu()函数创建主窗口的菜单栏
第15-26行新建三个子窗口用于在主窗口中显示。
第28-30行在workSpace中插入这些子窗口,即实现了多文档的显示。
第37-39行实现对子窗口的arrangeIcons布局,它的布局方式是将所有子窗口以标题栏的方式在主窗口的底部进行排列,如下图所示。可直接把菜单的triggered()信号与QWorkspace对象的arrangeIcons()方法相连。
注意此排列方式,仅对已经最小化的子窗口起作用。
第41-43行实现子窗口的tile布局,tile的意思是用子窗口把主窗口像铺瓦片或贴瓷砖一样排满,如下图所示,可直接连接QWorkspace对象的tile()函数实现。
第45-47行实现对子窗口的cascade布局,即子窗口的层叠显示,如下图所示,可直接连接QWorkspace对象的cascade()函数实现。
第55-57行使下一个子窗口获得焦点,成为当前应用子窗口,直接把菜单项与QWorkspace对象的activateNextWindow()函数连接实现。
第59-61行使前一个子窗口获得焦点,成为当前应用子窗口,直接把菜单项与QWorkspace对象的activatePreviousWindow()函数连接实现。
子窗口的顺序由QWorkspace的WindowOrder属性决定,有以下两种可能的顺序。
QWorkspace.CreationOrder:子窗口创建的先后顺序。
QWorkspace.StackingOrder:子窗口堆栈的顺序,即处于最上方的子窗口是最后一个子窗口。
其中,CreationOrder是默认的子窗口顺序。
当调用windowList()函数获得主窗口的所有子窗口列表时,以WindowOrder作为参数,返回的子窗口列表即以指明的顺序进行排列。
第64行通过QWorkspace的setScrollBarsEnabled()函数,可对workSpace滑动条的可用性进行设置。
注:本文基本上是经过改编的《Linux窗口程序设计--Qt4精彩实例分析》一书的PyQt4 for windows版本
转自:http://blog.csdn.net/chumpklutz/article/details/6073828
相关文章推荐
- PyQt4 精彩实例分析* 实例6 实现QQ抽屉效果
- *PyQt4 精彩实例分析* 实例14 分割窗口
- PyQt4 精彩实例分析* 实例2 标准对话框的使用
- PyQt4 精彩实例分析* 实例21 不规则窗体
- PyQt4 精彩实例分析* 实例15 停靠窗口
- PyQt4 精彩实例分析* 实例22 电子钟
- 《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用
- PyQt4 精彩实例分析* 实例7 表格的使用
- *PyQt4 精彩实例分析* 实例23 程序启动画面
- linux窗口程序设计 Qt4精彩实例分析 pyqt实现 实例2 标准对话框的使用
- PyQt4 精彩实例分析* 实例24 基本QMainWindow主窗口程序
- PyQt4 精彩实例分析* 实例2 标准对话框的使用
- PyQt4 精彩实例分析* 实例8 使用进度条
- *PyQt4 精彩实例分析* 实例17 综合布局实例
- PyQt4 精彩实例分析* 实例9 利用Qt Designer设计一个对话框
- PyQt4 精彩实例分析* 实例3 各类位置信息
- PyQt4 精彩实例分析* 实例11 动态加载Ui
- PyQt4 精彩实例分析 实例1 Hello Kitty!
- PyQt4 精彩实例分析* 实例1 Hello Kitty!
- PyQt4 精彩实例分析* 实例4 使用标准输入框