PyQt5的主窗口QMainWindow简介

时间:2022-06-22
本文章向大家介绍PyQt5的主窗口QMainWindow简介,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

看过上一篇我们知道,在PyQt5中了,所有的控件都是继承自。在桌面应用当中,我们常用的软件都会包含一个主窗口。主窗口就是承载所有控件的一个窗体。在PyQt5当中常用的主窗体有两种QMainWindow和QDialog。当然这两个也是继承自QWidget类。因为他们都继承自这个类,所以这三个类都是可以用来创建主窗口的,可以直接使用,也可以继承后再使用。

窗口类型

QMainWindow窗口可以包含菜单栏,工具栏,状态栏,标题栏等,所以是我们最常用的窗口形式。 QDialog是对话框窗口的基类对话框,主要用来执行短期任务或者与用户进行互动,它可以是模态的,也可以是非模态的。对话框没有菜单栏、工具栏、状态栏。模态指的是窗口打开的时候,它底下的父窗口是不可操作的;非模态就是当我们打开一个子窗口的时候,其下面的窗口也是可以操作的。对话框可以衍生为颜色选择对话框(QColorDialog)、字体对话框(DFontDialog)、文件选择对话框(DFileDialog)、输入对话框(DInputDialog)、消息确认框(QMessageBox)、进度条对话框(QProgressDialog)等等。继承关系如下:

QWidget继承关系图

对于主窗口的选择如果包含状态栏、工具栏、菜单栏等可以使用QMainWindow。如果只是对话框形式不包含以上几种就可以使用QDialog。如果不确定或者说他会作为顶层窗口(没有父窗口的窗口就是顶层窗口)或者嵌入到其他窗口中,那么就可以使用最根本的基类QWidget类。

主窗口的使用

在这里我们先看一下最常用的主窗口类QMainWindow,它为用户提供了一个应用程序框架,包含有自己的布局,可以在布局中添加控件。

看一下下面的这张图片就是QMainWindow。在它的中间会有一个QWidget占着中心的位置,我们可以使用setCentralWidget来设置中心窗口。

主窗口布局区域

因为QMainWindow继承自QWidget,所以拥有它的所有派生类方法和属性。而QMainWindow中有几个比较重要的方法。

方法

描述

addToolBar()

添加工具栏

centralWidget()

返回窗口中心的一个控件未设置时返回空

menuBar

返回主窗口的菜单栏

setCentralWidget()

设置窗口中心的控件

setStatusBar()

设置状态栏

statusBar()

获得状态栏对象

状态栏对象可以调用showMessage(message, timeout=0)方法显示状态栏信息,第1个参数是要显示的状态栏信息,第2个参数是信息停留的时间(单位是毫秒),默认是0表示一直显示状态栏信息。

一般在创建一个子窗口的时候,控件和布局管理器都是成对出现的。这里是指当一个控件作为载体上面承载了其他控件的时候才会使用布局管理器。如果只是一个单独的空间,那么是不需要和布局管理器配套使用的。

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QTextEdit, QPushButton, QWidget, QHBoxLayout

class Example(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()

        def initUI(self):
            self.widget = QWidget()
            # 设置中心窗口
            self.setCentralWidget(self.widget)

            self.textEdit = QTextEdit(self.widget)
            self.textEdit.setGeometry(100, 100, 100, 30)

            # 创建一个布局管理器
            layout = QHBoxLayout()
            btn1 = QPushButton()
            btn1.setText("按钮左")
            layout.addWidget(btn1)
            btn2 = QPushButton()
            btn2.setText("按钮右")
            layout.addWidget(btn2)
            self.widget.setLayout(layout)
            self.setGeometry(300, 300, 500, 500)
            self.setWindowTitle('QMainWindow综合使用')
            self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    example = Example()
    example.show()
    sys.exit(app.exec_())

在使用QMainWindow的时候,我们通常不会直接使用setLayout方法,而是通过设置窗口中心控件,然后创建一个布局管理器与窗口中心控件配套使用。

class Example(QMainWindow) 首先创建一个类继承自QMainWindow,然后执行初始化函数initUI()

self.widget = QWidget() self.setCentralWidget(self.widget) 创建一个窗口,将其设置为主窗口的中心窗口

self.textEdit = QTextEdit(self.widget) self.textEdit.setGeometry(100, 100, 100, 30) 创建一个编辑框,将其设置为主窗口的子控件QTextEdit(self.widget),创建的时候指定父控件,当然也可以在创建控件以后使用self.textEdit.setParent(self.widget)来设置其父窗口。

layout = QHBoxLayout(self.widget) 创建一个水平布局管理器,作为主窗口的布局管理器,这行代码相当于以下两行代码 layout = QHBoxLayout() self.widget.setLayout(layout)

布局管理器的具体介绍,请查看之前的那篇文章,QMainWindow的介绍今天就到这里,你Get到了吗?