一、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)
-
效果
|