博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多文档
阅读量:6625 次
发布时间:2019-06-25

本文共 3355 字,大约阅读时间需要 11 分钟。

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

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

代码:

 

1 #coding: utf-8 2 from PyQt4.QtCore import * 3 from PyQt4.QtGui import * 4 import sys 5  6 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) 7  8 class MainWidget(QMainWindow): 9     def __init__(self, parent=None):10         super(MainWidget, self).__init__(parent)11         self.setWindowTitle(self.tr("多文档窗口"))12         self.workSpace = QWorkspace()13         #设置主窗口的中央窗体为 QWorkspace 对象,以使主窗口能实现多文档的布局方式14         self.setCentralWidget(self.workSpace)15 16         window1 = QMainWindow()17         window1.setWindowTitle(self.tr("窗口1"))18         edit1 = QTextEdit(self.tr("子窗口1"))19         window1.setCentralWidget(edit1)20         window2 = QMainWindow()21         window2.setWindowTitle(self.tr("窗口2"))22         edit2 = QTextEdit(self.tr("子窗口2"))23         window2.setCentralWidget(edit2)24         window3 = QMainWindow()25         window3.setWindowTitle(self.tr("窗口3"))26         edit3 = QTextEdit(self.tr("子窗口3"))27         window3.setCentralWidget(edit3)28 29         self.workSpace.addWindow(window1)30         self.workSpace.addWindow(window2)31         self.workSpace.addWindow(window3)32         #createMenu()函数创建主窗口的菜单栏33         self.createMenu()34         self.slotScroll()35 36     def createMenu(self):37         layoutMenu = self.menuBar().addMenu(self.tr("布局"))38         #现对子窗口的 arrangeIcons 布局,它的布局方式是将所有子窗口以标题栏的方式在主窗口的底部进行排列,39         # 如下图所示。可直接把菜单的 triggered()信号与QWorkspace 对象的 arrangeIcons()方法相连。40         #注意此排列方式,仅对已经最小化的子窗口起作用。41         arrange = QAction(self.tr("排列图标"), self)42         self.connect(arrange, SIGNAL("triggered()"),self.workSpace,SLOT("arrangelcons()"))43         layoutMenu.addAction(arrange)44         #实现子窗口的 tile 布局,tile 的意思是用子窗口把主窗口像铺瓦片或贴瓷砖一样排满,如下图所示,45         # 可直接连接 QWorkspace 对象的 tile()函数实现46         tile = QAction(self.tr("平铺"), self)47         self.connect(tile, SIGNAL("triggered()"), self.workSpace, SLOT("tile()"))48         layoutMenu.addAction(tile)49 50         cascade = QAction(self.tr("层叠"), self)51         self.connect(cascade, SIGNAL("triggered()"), self.workSpace, SLOT("casxade()"))52         layoutMenu.addAction(cascade)53 54         otherMenu = self.menuBar().addMenu(self.tr("其它"))55         scrollAct = QAction(self.tr("滚动"), self)56         self.connect(scrollAct, SIGNAL("triggered()"), self.slotScroll)57         otherMenu.addAction(scrollAct)58         otherMenu.addSeparator()59 60         nextAct = QAction(self.tr("下一个"), self)61         self.connect(nextAct, SIGNAL("triggered()"), self.workSpace, SLOT("activateNextWindow()"))62         otherMenu.addAction(nextAct)63 64         previoustAct = QAction(self.tr("上一个"), self)65         self.connect(previoustAct, SIGNAL("triggered()"), self.workSpace, SLOT("activatePreviousWindow()"))66         otherMenu.addAction(previoustAct)67     #slotScroll()槽函数完成对多文档空间 QWorkspace 的滑动条进行设置68     def slotScroll(self):69         self.workSpace.setScrollBarsEnabled(not self.workSpace.scrollBarsEnabled())70 71 app = QApplication(sys.argv)72 main = MainWidget()73 main.show()74 app.exec_()

 

 

 

转载于:https://www.cnblogs.com/nju2014/p/4540550.html

你可能感兴趣的文章
搭建Websocket简易聊天室
查看>>
Oracle技术之flashback table
查看>>
PIE SDK文本元素的绘制
查看>>
asp.net 页面传值
查看>>
解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题 ||ubuntu下将普通用户权限升级为root用户权限的方法;...
查看>>
【Python实战】Scrapy豌豆荚应用市场爬虫
查看>>
Linux 内核中断内幕
查看>>
CSS表示颜色、行间距、缩进、文字修饰
查看>>
echarts 重新渲染时图表重叠现象的问题解决方法
查看>>
学无止境,学习AJAX(一)
查看>>
Appium for window 如何运行inspector?
查看>>
android3D动画,绕y轴旋转
查看>>
ios mac 对照片进行JPEG压缩
查看>>
前端开发中那些不招人“待见”的功能
查看>>
iOS开发- 蓝牙后台接收数据(BLE4.0)
查看>>
uva-10050-模拟水题
查看>>
Gulp和webpack的区别,是一种工具吗?
查看>>
NDK获取android下sd card id
查看>>
JQuery读取XML文件
查看>>
正向代理与反向代理
查看>>