一、QMdiArea和QMdiSubWindow类中的常用方法
方法 | 描述 |
---|---|
addSubWindow() | 将一个小控件添加在MDI区域作为一个新的子窗口 |
removeSubWindow() | 删除一个子窗口中的小控件 |
setActiveSubWindow() | 激活一个子窗口 |
cascadeSubWindows() | 安排子窗口在MDI区域级联显示 |
tileSubWindows() | 安排子窗口在MDI区域平铺显示 |
closeActiveSubWindow() | 关闭活动的子窗口 |
subWindowList() | 返回MDI区域的子窗口列表 |
setWidget() | 设置一个小控件作为QMdiSubWindow实例对象的内部控件 |
二、使用QMdiSubWindow加载的多文档界面
- 代码
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import * class Demo(QMainWindow): def __init__(self): super(Demo, self).__init__() self.setGeometry(100, 100, 500, 500) self.setWindowTitle("多文档界面开发") self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.add_sub_window() def add_sub_window(self): sub_win = QMdiSubWindow() sub_win.resize(400, 400) self.mdi.addSubWindow(sub_win) if __name__ == '__main__': app = QApplication(sys.argv) form = Demo() form.show() sys.exit(app.exec_())
- 效果
使用QMainWindow作为子窗口加载
为什么会想到使用QMainWindow作为子窗口呢?首先,QMainwindow可以使用GUI界面QT Designer进行界面设计,还有就是QMainWindow支持QToolBar以及QStatusBar等设计效果。
-
代码
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import * class Demo(QMainWindow): def __init__(self): super(Demo, self).__init__() self.setGeometry(100, 100, 500, 500) self.setWindowTitle("多文档界面开发") self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.add_sub_window() def add_sub_window(self): sub_win = QMainWindow() sub_win.resize(400, 400) self.mdi.addSubWindow(sub_win) if __name__ == '__main__': app = QApplication(sys.argv) form = Demo() form.show() QStatusBar sys.exit(app.exec_())
-
效果
看效果图我们发现,这里的子窗口大小怎么不是我们想要的,怎么只有一个头部,事实上,按照官方的方法,QMdiArea支持的子窗口类型是QMdiSubWindow,直接使用self.mdi.addSubWindow(sub_win),如果sub_win不是QMdiSubWindow类型,窗口进行加载就会出现问题,那么问题如何解决呢?看下面的代码 -
代码
将上述代码中的add_sub_window修改成下面的形式,即可解决子窗口加载QMainWindow无法设置大小的问题,针对QWidge以及其他的窗体也适合def add_sub_window(self): sub_win = QMdiSubWindow() main_window = QMainWindow() main_window.resize(400, 400) sub_win.setWidget(main_window) sub_win.resize(main_window.size()) self.mdi.addSubWindow(sub_win)
-
效果