3.PyQt5【窗口组件】主窗口-QMainWindow

一、前言

QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow 常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态条变得更容易,当用户点击菜单项或者工 具条按钮时,槽会被调用。

二、学习目标

1.QMainWindow界面实现

2.QMainWindow常用方法

3.添加菜单栏

4.添加工具栏

5.添加状态栏

三、知识点

1.【QMainWindow界面实现】

QMainWindow类提供一个有菜单条、工具栏、状态条的主应用程序窗口。

QAction就是一个实现某些功能的“动作”,可以为其编写槽函数,使用一个QAction对象可以创建菜单项、工具栏按钮,点击菜单项或工具栏按钮就执行了关联的Action的槽函数。

  • 普通写法

    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QApplication, QMainWindow
    
    #1.创建app实例
    app = QApplication(sys.argv)
    #2.创建窗体实例
    myMain = QMainWindow(flags=Qt.MSWindowsFixedSizeDialogHint)
    #3.显示窗体
    myMain.show()
    #4.运行app
    sys.exit(app.exec_())
    
  • 单继承写法

    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QApplication, QMainWindow
    
    
    class QmyMainWindow(QMainWindow):
    
        def __init__(self, parent=None):
            super().__init__(parent, flags=Qt.MSWindowsFixedSizeDialogHint)  # 调用父类的构造函数,创建QWidget窗体
    
    
    if __name__ == '__main__':
        # 1.创建app实例
        app = QApplication(sys.argv)
        # 2.创建窗体实例
        myMain = QmyMainWindow()
        # 3.显示窗体
        myMain.show()
        # 4.运行app
        sys.exit(app.exec_())
    

2.【QMainWindow常用方法】

由于QMainWindow类继承自QWidget类,所以QWidget有的属性和方法,也适用于QMainWindow。

        # 设置窗口位置及大小
        self.move(150, 150)
        self.resize(400, 500)
        self.setWindowTitle('窗口坐标系统演示')
        # 设置气泡提示
        self.setToolTip('这是一个气泡显示')
        # 设置图标
        self.setWindowIcon(QIcon('logo.png'))

3.【添加菜单栏】

  • 添加步骤

    1)创建窗口菜单栏

    2)给菜单栏添加菜单项目

    3)给菜单项目添加动作

    4)为动作绑定信号

  • 代码示例

    先实现两个槽函数,文件新建及文件保存:

        def new_action(self):
            print("这是新建选项!")
    
        def save_action(self):
            print("这是保存选项!")
    

    添加菜单栏:

            # 1.创建窗口菜单栏
            self.bar = self.menuBar()
            # 2.给菜单栏添加菜单项目
            self.file = self.bar.addMenu("文件")
            # 3.给菜单项目添加动作
            self.new = self.file.addAction("新建")
            self.save = self.file.addAction("保存")
            self.save.setShortcut("CTRL+S")      # 设置快捷键
            # 4.为动作绑定信号
            self.new.triggered.connect(self.new_action)  # 信号关联槽函数
            self.save.triggered.connect(self.save_action)  # 信号关联槽函数
    

4.【添加工具栏】

  • 添加步骤

    1)创建窗口工具栏

    2)为工具栏添加动作

    3)为动作绑定信号

  • 代码示例

    先实现两个槽函数,文件新建及文件保存:

        def new_action(self):
            print("这是新建选项!")
    
        def save_action(self):
            print("这是保存选项!")
    

    添加菜单栏:

            # 1.创建窗口工具栏
            self.toolBar = self.addToolBar("File")
            # 2.创建新的动作,添加到工具栏
            self.new = QAction(QIcon('logo.png'), "new", self)
            self.save = QAction(QIcon("logo.png"), "save", self)
            self.toolBar.addAction(self.new)
            self.toolBar.addAction(self.save)
            # 3.为动作绑定信号
            self.new.triggered.connect(self.new_action)  # 信号关联槽函数
            self.save.triggered.connect(self.save_action)  # 信号关联槽函数
    

5.【添加状态栏】

  • 添加步骤

    1)先创建一个状态栏

    2)然后将状态栏设置到窗口

    3)将需要显示的信息显示在窗口

  • 代码示例

            # 1.先创建一个状态栏
            self.statuBar = QStatusBar()
            # 2.然后将状态栏设置到窗口
            self.setStatusBar(self.statuBar)
            # 3.将需要显示的信息显示在窗口
            self.statuBar.showMessage('这是状态栏信息', 5000)
    
posted @   测开星辰  阅读(309)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示