内容简介:在上一篇文章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这个包,就像是房地产公司,把一个简陋的毛坯房交给我们了,然后房子里面要怎么装修、怎么布局,它都不会管了,完全由我们自己来掌控。
二、MainWindow里面有什么?
上面我们说了,MainWindow()控件就像是一个毛坯房。既然是毛坯房,那么在规划之处,房地产公司肯定会对其有一个基础的户型规划,门、客厅、阳台、卧室、卫生间等等基础结构的位置都已经有基础的标明。
同样的,MainWindow作为一个主窗口的框架,其也有自己的基础布局,我们可以添加菜单栏、工具栏、状态栏、主中央口控件等内容进去。下图是Qt官方对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()
运行上述代码,我们可以得到和上一篇文章一样的图形界面窗口,如下图所示:
下面,我们就在这个图形界面主窗口中演示添加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(),然后设置了菜单栏的宽度,最后在菜单栏中添加了三个菜单项,运行上述代码,我们可以得到如下图所示的主窗口:
可以看到,主窗口中就已经出现了菜单栏,并且其中有三个我们添加的菜单项。只不过目前的菜单项都还没有实际的功能,因为我们没有为菜单项绑定具体的行为。
四、在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()
运行上述代码,我们将会得到一个如下动图所示的主窗口界面:
同样的,由于没有对行为进行事件响应的绑定,所以现在工具栏也是没有任何实际效果的。
五、在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()
运行上述代码,我们将会在主窗口中的最底部看到一个状态栏,上面显示了一行文本消息,如下图所示:
六、在MainWindow中设置中央控件
主窗口中的中央控件用于显示主窗口的基础控件,每一个主窗口都会有一个中央控件,就算其是一个占位符,也必须存在。中央控件通常来说是一个标准的Qt窗口小控件,比如QWidget、QPushbutton等等。
我们在实例化了一个Qt窗口控件之后,使用self.setCentralWidget()方法指定中央控件即可。
七、最后
上面我们初步介绍了PySide2/PyQt5中的主窗口类MainWindow的一些基础方法和布局,还有更多的方法再此都没有讲解到。但是就像上面所说的,MainWindow就像是一间什么都没有的毛坯房,我们可以在里面进行各种装修、设计和创造。这个装修、设计和创造的过程,就是我们进行图形界面编程的过程。理解了这一概念,我们就能够通过上述几个例子,理解MainWindow对象所承载和能够实现的功能。
有疑问欢迎留言讨论:)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件
- WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件
- Flutter控件--Scaffold
- Flutter控件--AppBar
- Flutter 手势密码控件
- Flutter 设置控件是否可见
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The CS Detective: An Algorithmic Tale of Crime, Conspiracy, and
Jeremy Kubica / No Starch Press / 2016-8-15 / USD 13.74
Meet Frank Runtime. Disgraced ex-detective. Hard-boiled private eye. Search expert.When a robbery hits police headquarters, it's up to Frank Runtime and his extensive search skills to catch the culpri......一起来看看 《The CS Detective: An Algorithmic Tale of Crime, Conspiracy, and 》 这本书的介绍吧!