PySide2/PyQt5的MainWindow()主窗口控件初览

栏目: C++ · 发布时间: 5年前

内容简介:在上一篇文章MainWindow()控件是Qt中的一个主窗口框架,其提供了构建应用程序图形用户界面的框架。形象地说,MainWindow()就像是一个房子的最基础结构,房子在毛坯房阶段时候的形态。我们创建一个继承自MainWindow对象的类,就相当于,嗖的一下,我们在市区的新楼盘里买了一套房。这套房里面什么都没有,干干净净的。Qt这个包,就像是房地产公司,把一个简陋的毛坯房交给我们了,然后房子里面要怎么装修、怎么布局,它都不会管了,完全由我们自己来掌控。

在上一篇文章 《使用PySide2编写一个最基础的图形界面》 中,州的先生(zmister.com)介绍了在PySide2/PyQt5中最基础的图形界面的创建方法。在那篇文章中,我们通过一个QtWidgets.MainWindow()类实现了一个空白的图形界面窗口。这篇文章,咱们就和州的先生(zmister.com)一起,来详细了解了解Qt中的MainWindow()控件。

文章目录

  • 一、MainWindow()是什么?
  • 二、MainWindow里面有什么?
  • 三、在MainWindow中添加菜单栏
  • 四、在MainWindow中添加 工具
  • 五、在MainWindow中添加状态栏
  • 六、在MainWindow中设置中央控件

一、MainWindow()是什么?

MainWindow()控件是Qt中的一个主窗口框架,其提供了构建应用程序图形用户界面的框架。形象地说,MainWindow()就像是一个房子的最基础结构,房子在毛坯房阶段时候的形态。

我们创建一个继承自MainWindow对象的类,就相当于,嗖的一下,我们在市区的新楼盘里买了一套房。这套房里面什么都没有,干干净净的。Qt这个包,就像是房地产公司,把一个简陋的毛坯房交给我们了,然后房子里面要怎么装修、怎么布局,它都不会管了,完全由我们自己来掌控。

PySide2/PyQt5的MainWindow()主窗口控件初览

二、MainWindow里面有什么?

上面我们说了,MainWindow()控件就像是一个毛坯房。既然是毛坯房,那么在规划之处,房地产公司肯定会对其有一个基础的户型规划,门、客厅、阳台、卧室、卫生间等等基础结构的位置都已经有基础的标明。

PySide2/PyQt5的MainWindow()主窗口控件初览

同样的,MainWindow作为一个主窗口的框架,其也有自己的基础布局,我们可以添加菜单栏、工具栏、状态栏、主中央口控件等内容进去。下图是Qt官方对MainWindow控件的布局描述:

PySide2/PyQt5的MainWindow()主窗口控件初览

也就是说,虽然默认的主窗口是一个一穷二白的图形界面,但是因为其设计之初就预设了一些布局,所以我们可以直接拿来使用。下面我们一一进行示例。

在开始添加之前,我们先来创建一个空白的主窗口,代码如下所示:

# coding:utf-8
# 州的先生
# https://zmister.com
from PySide2 import QtWidgets
import sys


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        


def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = App()
    gui.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

运行上述代码,我们可以得到和上一篇文章一样的图形界面窗口,如下图所示:

PySide2/PyQt5的MainWindow()主窗口控件初览

下面,我们就在这个图形界面主窗口中演示添加MainWindow的各种基础控件。

三、在MainWindow中添加菜单栏

要在主窗口中添加菜单栏,我们只需要实例化一个QMenuBar()类,然后向其中添加具体的菜单项即可,代码如下所示:

# coding:utf-8
# 州的先生
# https://zmister.com
from PySide2 import QtWidgets
import sys


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        file_menu = QtWidgets.QMenuBar(self) # 实例化一个菜单栏
        file_menu.setFixedWidth(200) # 设置菜单栏的宽度
        file_menu.addMenu("文件") # 添加一个菜单按钮
        file_menu.addMenu("编辑") # 添加一个菜单按钮
        file_menu.addMenu("关于") # 添加一个菜单按钮


def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = App()
    gui.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

如代码中的注释所说,我们首先实例化了一个QMenuBar(),然后设置了菜单栏的宽度,最后在菜单栏中添加了三个菜单项,运行上述代码,我们可以得到如下图所示的主窗口:

PySide2/PyQt5的MainWindow()主窗口控件初览 可以看到,主窗口中就已经出现了菜单栏,并且其中有三个我们添加的菜单项。只不过目前的菜单项都还没有实际的功能,因为我们没有为菜单项绑定具体的行为。

四、在MainWindow中添加工具栏

在MainWindow中添加工具栏,我们不需要像添加菜单栏那样实例化一个对象,MainWindow中已经有一个方法addToolbar()可以直接添加一个工具栏,在添加工具栏之后,再使用addAction()方法,像工具栏中添加工具选项即可,代码如下所示:

# coding:utf-8
# 州的先生
# https://zmister.com
from PySide2 import QtWidgets
import sys


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        view_toolbar = self.addToolBar("View")
        view_toolbar.addAction("打开")
        view_toolbar.addAction("保存")
        view_toolbar.addAction("撤回")


def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = App()
    gui.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

运行上述代码,我们将会得到一个如下动图所示的主窗口界面:

PySide2/PyQt5的MainWindow()主窗口控件初览

同样的,由于没有对行为进行事件响应的绑定,所以现在工具栏也是没有任何实际效果的。

五、在MainWindow中添加状态栏

在主窗口中添加状态栏首先需要返回主窗口的状态栏(将主窗口的状态栏赋值给一个变量),然后在调用状态栏。下面的代码演示了在状态栏中显示一个消息:

# coding:utf-8
# 州的先生
# https://zmister.com
from PySide2 import QtWidgets
import sys


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        status = self.statusBar()
        status.showMessage("这是一个状态栏消息")


def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = App()
    gui.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

运行上述代码,我们将会在主窗口中的最底部看到一个状态栏,上面显示了一行文本消息,如下图所示:

PySide2/PyQt5的MainWindow()主窗口控件初览 六、在MainWindow中设置中央控件

主窗口中的中央控件用于显示主窗口的基础控件,每一个主窗口都会有一个中央控件,就算其是一个占位符,也必须存在。中央控件通常来说是一个标准的Qt窗口小控件,比如QWidget、QPushbutton等等。

我们在实例化了一个Qt窗口控件之后,使用self.setCentralWidget()方法指定中央控件即可。

七、最后

上面我们初步介绍了PySide2/PyQt5中的主窗口类MainWindow的一些基础方法和布局,还有更多的方法再此都没有讲解到。但是就像上面所说的,MainWindow就像是一间什么都没有的毛坯房,我们可以在里面进行各种装修、设计和创造。这个装修、设计和创造的过程,就是我们进行图形界面编程的过程。理解了这一概念,我们就能够通过上述几个例子,理解MainWindow对象所承载和能够实现的功能。

有疑问欢迎留言讨论:)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP and MySQL Web Development (3rd Edition) (Developer's Library

PHP and MySQL Web Development (3rd Edition) (Developer's Library

Luke Welling、Laura Thomson / Sams / 2004-09-29 / USD 49.99

We've taken the best and made it even better. The third edition of the best-selling PHP and MySQL Web Development has been updated to include material and code on MySQL 5, PHP 5 and on PHPs object mod......一起来看看 《PHP and MySQL Web Development (3rd Edition) (Developer's Library》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具