Python 图形开发:PyQt 创建复合窗口部件

在对话框(QDialog)的界面创建中,我们使用布局管理器来实现窗口部件(QWidget)的布局,即通过调用 QDialog.setLayout() 方法来设定布局(QLayout)。通过使用布局管理器,我们可以往布局中添加多个窗口部件,并规定它们的位置,最后将布局应用到对话框中,于是对话框便能展示出这些窗口部件。

但在 QMainWindow 中,我们无法直接设定布局,因为 setLayout() 方法是 QWidget 类的方法,而 QDialog 正是继承自 QWidget。

因此,我们也就无法通过直接设定布局来给 QMainWindow 添加窗口部件。那么我们该怎样往 QMainWindow 里添加窗口部件呢?QMainWindow 提供了 setCentralWidget() 方法来设定中心窗口部件。

不过这样一来,我们不就只能往窗体里添加一个窗口部件了吗?确实,不像布局允许我们添加多个部件,中心窗口部件只能是单独的一个 QWidget。不过,它既可以是一个简单的窗口部件,也可以是一个复合窗口部件。因此,如果我们想要在 QMainWindow 中实现多个窗口部件的复合布局,可以通过创建一个复合窗口部件来实现。

如下图所示:

这里的中心窗口部件 QWidget 是一个抽象的类,它提供了基本的特性和必要的方法。还记得前面提到 QDialog 继承自 QWidget 吗?实际上,这与创建对话框类非常相似,只不过我们最后把这个 QWidget类 设置为中心窗口部件,而不是作为最顶级窗口来显示。我们可以将这里的 QWidget 视为之前的 QDialog,它具有 setLayout() 方法,可以设定布局,也可以通过 addWidget() 方法添加窗口部件。

接下来,我们给出示例代码。

首先,创建一个 QWidget 实例,它将作为 QMainWindow 的中心窗口部件:

compoundWidget = QWidget()

然后创建一个布局,并往布局中添加各种窗口部件:

layout = QHBoxLayout()
layout.addWidget(QPushButton("Widget1"))
layout.addWidget(QPushButton("Widget2"))

再将布局应用到复合窗口部件 compoundWidget 中:

compoundWidget.setLayout(layout)

将复合窗口部件设为中心窗口部件:

self.setCentralWidget(compoundWidget)

至此,我们通过创建复合窗口部件的方式,成功实现 QMainWindow 中多个窗口部件的复合布局。

相关文章

Loading Likes...

发表评论

电子邮件地址不会被公开。 必填项已用*标注