QMainWindow
QMain Window主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如将工具栏、菜单栏和状态栏等添加到布局管理器中。
1、窗口类型的介绍:
QMainWindow、QWidget和 QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用。
Main Window窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。
QDialog是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。QDialog窗口没有菜单栏、工具栏、状态栏等。
如果是主窗口,就使用QMainWindow类;如果是对话框,就使用QDialog类;如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用owidget类。
本节只介绍QMainWindow类,关于QWidget类与QDialog类的更详细用法会在后续章节中进行介绍,读者只需要对它们有简单的了解就行。这些内容都非常简单,并不需要进行太深入的研究。
2、创建主窗口
如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口则是子窗口。没有父窗口的窗口是顶层窗口,QMainWindow就是一个顶层窗口,它可以包含很多界面元素,如菜单栏、工具栏、状态栏、子窗口等。
在PyQt中,在主窗口(QMainWindow)中会有一个控件(QWidget)占位符来占着中心窗口,可以使用setCentralWidget()来设置中心窗口。
QMainWindow继承自QWidget类,拥有它的所有派生方法和属性。
QMain Window类中比较重要的方法如下所示。

注意:QMain Window不能设置布局(使用setLayout()方法),因为它有自己的布局。
实例演示1:创建主窗口
运行程序,显示效果如下:

代码分析:
使用QMainWindow类的statusBar()方法创建状态栏,然后使用showMessage()方法将提示信息显示在状态栏中,提示信息的显示时间是5秒,5秒后状态栏提示信息消失。
在自定义的窗口类 MainWindow中,继承了主窗口QMainWindow类所有的属性和方法,然后使用父类QMainWindow 的构造函数super()初始化窗口,再设置窗口标题,最后通过消息循环显示窗口,状态栏可以直接由 statusBar()产生,由showMessage()来显示信息。
实例演示2:将主窗口放在屏幕中间
QMainWindow利用QDesktopWidget类来实现主窗口居中显示。在主窗口初始化后,将它放在屏幕中间。其完整代码如下:
运行代码,显示效果如下:

代码分析:
该行语句用来设置QWidget 窗口的大小,宽度为370像素,高度为250像素。
该行语句用来计算显示屏幕的大小:(screen.width()*screen.height()),其中QDesktop Widget是描述显示屏幕的类,通过QDesktopWidget().screenGeometry()来获得屏幕的大小。
该行语句用来获取QWidget窗口的大小:(size.width()*size.heiget()).
该行语句将窗口移动到屏幕中间。
实例演示3:关闭主窗口
演示关闭主窗口,其完整代码如下:
运行程序,显示效果如下:

代码分析:
当单击“关闭主窗口”按钮后,将关闭显示的窗口,通过以下代码将按钮的clicked信号与onButtonClick槽函数关联起来。
在槽函数onButtonClick()里获得QApplication类的对象,调用它的quit()函数来关闭窗口,在槽函数里还可以获得发送信号的对象,在本例中发送信号对象是名字为“关闭主窗口”的按钮控件,然后就可以通过按钮的text()函数获得按钮的显示名称。