多文档界面

         一个典型的GUI应用程序可能有多个窗口,选项卡控件和堆栈窗口控件允许一次石永红其中的一个窗口。然而,很多时候这种方法不是很好用,因为其他窗口的视图是隐藏的。

        一种同时显示多个窗口的方法是创建多个独立的窗口,这些独立的窗口被称为SDI(Single Document Interface,单文档界面),每个窗口都可以有自己的菜单系统、工具栏等。这需要占用较多的内存资源。

        MDI(Multiple Document Interface,多文档界面)应用程序占用较少的内存资源,子窗口都可以放在主窗口容器中,这个容器控件被称为QMdiArea。

        QMdiArea控件通常占据在QMainWindow对象的中央位置,子窗口在这个区域是QMdiSubWindow类的实例,可以设置任何QWidget作为子窗口对象的内部控件,子窗口在MDI区域进行级联排列布局。

QMdiArea类和QMdiSubWindow类中的常用方法如下表所示。

实例1:多重文档界面

演示在PyQt5的窗口中使用QMdiArea控件,完整代码如下:

代码分析:

在这个例子中,主窗口QMainWindow拥有一个菜单控件和MidArea控件。

当程序运行时,显示如下:

当单击菜单控件触发triggered信号,连接到槽函数windowaction()。

当选择菜单中的“New”动作时,会添加一个新的MDI,每个MDI都有标题,在主窗口内部会添加MDI的数量。

我们可以随意添加点击”New”添加窗口,比如添加了8个,显示如下:

在“File”下,除了”New“外,还有“cascade”和“Tiled”动作,功能是选择子窗口的排列方式,“cascade”是级联显示,效果如下:

“Tiled”是平铺显示子窗口,效果如下:

看起来是不是很有意思呢,赶快自己动手试一试吧!

资源下载: