103.PyQt5_QMenuBar、QToolBar、QStatusBar_菜单栏、工具栏、状态栏控件

在这里插入图片描述

我 的 个 人 主 页: 失心疯的个人主页
入 门 教 程 推 荐 : Python零基础入门教程合集
虚 拟 环 境 搭 建 : Python项目虚拟环境(超详细讲解)
PyQt5 系 列 教 程: Python GUI(PyQt5)文章合集
Oracle数据库教程: Oracle数据库文章合集
优 质 资 源 下 载 : 资源下载合集

在这里插入图片描述

QMenuBar、QToolBar、QStatusBar_菜单栏、工具栏、状态栏控件

  • 在桌面应用程序中,主窗口是一个典型的应用程序窗口,具有菜单栏、工具栏和状态栏
    • 103.PyQt5_QMenuBar、QToolBar、QStatusBar_菜单栏、工具栏、状态栏控件_第1张图片
  • Dock Widget 是一个可停靠的窗口,可以在主窗口的四个边缘停靠,用户可以通过拖动和放置Dock Widget 到主窗口的边缘来创建和定位布局。Dock Widget常用于显示工具栏、属性编辑器、文件浏览器等工具
  • 使用 Dock Widget,我们可以将一些常用的功能视图整合到主窗口中,并且这些视图可以根据需要随时显示或隐藏,方便用户使用。当用户不再需要这些视图时,可以将它们隐藏到窗口的边缘,不会占用主窗口的空间

QMenuBar 菜单栏

  • 描述
    • 菜单栏是GUI应用的常规组成部分,是位于各种菜单中的一组命令操作
    • 菜单栏(QMenuBar) 它分为两部分:
      • 主菜单(QMenu)
      • 菜单项(QAction)
    • 一个QMenu中可包含任意多个QAction对象,也可包含另外的QMenu,用来表示级联菜单
  • 结构图
    • 103.PyQt5_QMenuBar、QToolBar、QStatusBar_菜单栏、工具栏、状态栏控件_第2张图片
  • QMenuBar类
    • QMenuBar类是所有窗口的菜单栏,创建菜单栏的两种方法如下
    • 要创建一个弹出菜单,PyQt提供了createPopupMenu()函数
    • 功能作用
      QMenuBar(parent)            # 创建菜单栏的同时设置父对象
      menuBar()                   # 返回主窗口的QMenuBar对象
      
      setObjectName(str)          # 给菜单栏对象设置ObjectName
      setGeometry(QRect)          # 同时设置菜单栏位置和大小
      move()                      # 设置菜单栏位置
      resize()                    # 设置菜单栏大小
      
          
      addMenu()                   # 在菜单栏中添加一个新的QMenu对象
      
      clear()                     # 清空菜单栏的所有内容
      
  • QMenu类
    • QMenu类是菜单栏中的菜单,可显示文本和图标,但不执行操作,类似于标签label的作用
    • 功能作用
      QMenu(parent)               # 创建菜单的同时设置父对象
      QMenu(title, parent)        # 创建菜单的同时设置菜单标题和父对象
      
      setIcon()                   # 设置主菜单图标
      setEnabled()                # 将操作按钮设置为启用/禁用
      setTitle()                  # 设置QMenu小控件的标题
      
      clear()	                    # 删除主菜单的所有内容
      
      title()                     # 返回QMenu小控件的标题
      
      addSeperator()              # 在菜单中添加一条分割线
      addAction()                 # 向QMenu小控件中添加一个操作按钮,其中包含文本或图标
      
  • QAction类
    • 是直接从QObject继承而来的一个类,不是一个可视组件
    • PyQt5中将用户与界面进行交互的元素抽象为一种“动作”,用QAction类表示
    • QAction类是一个运行在菜单栏、工具栏和定制键盘快捷键的抽象类,它是一个真正执行操作的部件
    • 功能作用
      QAction(parent)             # 创建菜单项的同时设置父对象
      QAction(text, parent)       # 创建菜单项的同时设置显示文本和父对象
      QAction(icon, text, parent) # 创建菜单项的同时设置图标、显示文本和父对象
      
      setIcon()                   # 设置Action的图标
      setText()                   # 设置Action的显示文字
      setObjectName()             # 设置该Action的objectName
      setToolTi()                 # 设置当鼠标短暂停留时出现的提示文字
      setCheckable()              # 设置Action是否可以被复选
      setShortcut()               # 设置快捷键
      setEnabled()               	# 设置菜单项是否可用
      
    • 可用信号
      triggered()                 # 菜单项被点击时触发该信号
      triggered(bool)             # 菜单项被点击时触发该信号,传递选中状态
      # 是带有复选状态参数的信号
      hovered()                   # 当鼠标滑过菜单项时触发该信号
      changed()                   # 当菜单项发射改变时触发该信号
      

QToolBar 工具栏

  • 描述
    • 该控件是由文本按钮、图标或者其他小控件按钮组成的可移动面板,通常位于菜单栏下方,作为工具栏使用;
    • 每次单击工具栏中的按钮,此时都会触发actionTriggered信号。这个信号将关联QAction对象的引用发送到链接的槽函数上
    • 工具栏上动态创建的组件,必须手动设置其信号与自定义槽函数的关联
  • 功能作用
    QToolBar(parent)            # 创建菜单工具栏的同时设置父对象
    QToolBar(title, parent)     # 创建菜单工具栏的同时设置标题和父对象
    
    addAction()                 # 添加一个QAction对象并创建工具栏按钮
    addSeparator()              # 添加一个分隔条
    addWidget()                 # 添加一个控件到工具栏,如QSpinBox、QLabel等
    
    setMovable()                # 设置工具栏是否可以移动
    setOrientation()            # 设置工具栏方向
    # 参数 
        # Qt.Horizontal         # 横向,默认
        # Qt.Vertical           # 纵向
        
    setToolButtonStyle()        # 设置文字、图片显示模式
    # 参数  Qt.ToolButtonStyle
        # Qt.ToolButtonTextUnderIcon      # 文字图片垂直排列
        # Qt.ToolButtonTextBesideIcon     # 文字图片水平排列
    

QStatusBar 状态栏

  • 描述
    • QStatusBar是窗体底部保留的一个水平条
    • 作为状态栏,用于显示应用程序相关的一些永久的或临时的状态信息
    • 一般通过监控控件或者系统的变化来显示相应的信息
  • 功能作用
    addWidget(widget, stretch)              # 将一个控件添加到状态栏,并设置拉伸系数,按添加的顺序从左到右排
    列
    addPermanentWidget(widget, stretch)     # 添加控件位于状态栏的最右边,并设置拉伸系数
    insertWidget(index, widget, stretch)    # 插入一个控件到指定索引位置,并设置拉伸系数,返回该控件所在的索引号
    
    showMessage()                           # 在状态栏中显示一条临时信息,指定显示时长
    # showMessage子控件是占据整个状态栏,会遮盖掉通过addWidget添加的所有元素
    
    clearMessage()                          # 删除正在显示的临时信息
    removeWidget()                          # 移除状态栏中指定控件
    
    currentMessage()                        # 获取状态栏当前显示文本信息
    

示例代码

  • 示例1:QMenuBat 菜单栏
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QMenuBar-功能作用')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
        def add_widget(self):
            # 创建菜单栏 QMenuBar
            menubar = QMenuBar(self)                        # 创建菜单栏对象,并设置父对象
            menubar.setObjectName('menubar')                # 给菜单栏对象设置ObjectName
            # menubar.move(0, 0)                              # 设置菜单栏位置
            # menubar.resize(500, 30)                         # 设置菜单栏大小
            menubar.setGeometry(QRect(0, 0, 500, 30))       # 同时设置菜单栏位置和大小
    
            # 创建主菜单 QMenu
            menu = QMenu(menubar)                           # 创建主菜单对象,并设置父对象
            menu.setObjectName('menu')                      # 给主菜单设置ObjectName
            menu.setTitle('文件')                            # 给主菜单设置标题
            # menu.setIcon(QIcon('../images/bmp/204.bmp'))  # 设置主菜单是否可用
            # menu.setEnabled(False)                        # 设置主菜单是否可用
            
            # 创建菜单项 QAction
            action = QAction(menu)                          # 创建菜单项对象,并设置父对象
            action.setObjectName('action')                  # 给菜单项设置ObjectName
            action.setText('新建')                           # 设置菜单项显示文本
            action.setIcon(QIcon('../images/bmp/100.bmp'))  # 设置菜单项图标
            action.setShortcut('Ctrl+N')                    # 设置菜单项快捷键
    
            actionsave = QAction(menu)                      # 创建菜单项对象,并设置父对象
            actionsave.setObjectName('actionsave')          # 给菜单项设置ObjectName
            actionsave.setText('保存')                       # 设置菜单项显示文本
            actionsave.setIcon(QIcon('../images/bmp/104.bmp'))  # 设置菜单项图标
            actionsave.setShortcut('Ctrl+S')                # 设置菜单项快捷键
            actionsave.setEnabled(False)
    
            # 创建子菜单
            menu_sub = QMenu(menu)                              # 创建主菜单用作子菜单
            menu_sub.setObjectName('menu_sub')                  # 给子菜单设置ObjectName
            menu_sub.setTitle('常用')                            # 给子菜单设置标题
            menu_sub.setIcon(QIcon('../images/bmp/218.bmp'))    # 给子菜单设置图标
    
            # 菜单项添加到主菜单
            menu.addAction(action)
            menu.addAction(actionsave)
            # 主菜单添加分隔线
            menu.addSeparator()
            # 子菜单添加到主菜单
            menu.addMenu(menu_sub)
    
            # 主菜单添加到菜单栏
            menubar.addMenu(menu)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 示例2:QToolBat 工具栏
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QToolBar-功能作用')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
        def add_widget(self):
            toolbar = QToolBar(self)
    
            # 创建菜单项 QAction
            action = QAction(toolbar)  # 创建菜单项对象,并设置父对象
            action.setObjectName('action')  # 给菜单项设置ObjectName
            action.setText('新建')  # 设置菜单项显示文本
            action.setIcon(QIcon('../images/bmp/100.bmp'))  # 设置菜单项图标
            action.setShortcut('Ctrl+N')  # 设置菜单项快捷键
    
            actionsave = QAction(toolbar)  # 创建菜单项对象,并设置父对象
            actionsave.setObjectName('actionsave')  # 给菜单项设置ObjectName
            actionsave.setText('保存')  # 设置菜单项显示文本
            actionsave.setIcon(QIcon('../images/bmp/104.bmp'))  # 设置菜单项图标
            actionsave.setShortcut('Ctrl+S')  # 设置菜单项快捷键
            # actionsave.setEnabled(False)
    
            actionexit = QAction(toolbar)
            actionexit.setObjectName('actionexit')  # 给菜单项设置ObjectName
            actionexit.setText('保存')  # 设置菜单项显示文本
            actionexit.setIcon(QIcon('../images/bmp/132.bmp'))  # 设置菜单项图标
    
            # fontc = QFontComboBox(toolbar)
    
            # 将菜单项添加到工具栏
            toolbar.addSeparator()
            toolbar.addSeparator()
            toolbar.addAction(action)
            toolbar.addAction(actionsave)
            toolbar.addSeparator()
            # toolbar.addWidget(fontc)
            # toolbar.addSeparator()
            toolbar.addAction(actionexit)
    
            # 设置工具栏是否可以移动(测试无效)
            movable = toolbar.setMovable(True)
            # 设置工具栏方向
            # toolbar.setOrientation(Qt.Vertical)
            toolbar.setOrientation(Qt.Horizontal)
    
            # toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  # 文字图片垂直排列
            toolbar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)  # 文字图片水平排列
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 示例3:QStatusBar 状态栏
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QStatusBar-功能作用')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
        def add_widget(self):
            # 创建状态栏对象
            status = QStatusBar(self)                       # 创建状态栏对象的同时设置父对象
            status.setObjectName('status')                  # 给状态栏设置ObjectName
            status.setGeometry(QRect(0, 270, 500, 30))      # 设置状态栏位置和大小
    
            # 创建放置在状态栏上的控件
            label = QLabel('状态栏显示', status)
            label1 = QLabel('状态栏显示1', status)
    
            prob = QProgressBar()
            prob.setRange(0, 100)
            prob.setValue(50)
    
            # 状态栏添加内容
            status.showMessage('准备就绪...', 2000)          # 设置显示一条临时信息,并指定显示时长
            # status.addWidget(label1)
            #
            status.addPermanentWidget(label, 0)             # 添加控件位于状态栏的最右边
            status.addPermanentWidget(prob, 0)              # 添加控件到状态栏,并设置拉伸系数,按添加顺序从左到右
            status.addPermanentWidget(label1, 0)            # 添加控件到状态栏,并设置拉伸系数,按添加顺序从左到右
            # status.clearMessage()                         # 删除正在显示的临时信息
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 示例4:右键菜单——方案1
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('')
            self.resize(500, 300)
            self.createPopupMenu()
    
            QMetaObject.connectSlotsByName(self)
    
        def contextMenuEvent(self, evt) -> None:
            # 弹出菜单移动到鼠标点击位置(相对于屏幕位置)
            self.menu.move(QPoint(evt.globalPos()))
            # 显示菜单
            self.menu.show()
    
        def createPopupMenu(self):
            self.menu = QMenu(self)
    
            action_new = QAction('新建', self)
            action_open = QAction('打开', self)
            action_copy = QAction('复制', self)
            action_cut = QAction('剪切', self)
            action_past = QAction('粘贴', self)
    
            action_new.triggered.connect(lambda: print('用户点击了新建菜单'))
    
            action_ls = [action_new, action_open, action_copy, action_cut, action_past]
            self.menu.addActions(action_ls)
    
            return self.menu
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 示例5:右键菜单——方案2
    from PyQt5.Qt import *
     
     
    class MyWindow(QWidget):
        def contextMenuEvent(self, evt:QContextMenuEvent) -> None:
            print('hello right menu')
            menu=QMenu(self)
     
            new_action=QAction('打开',menu)
            close_action=QAction('关闭',menu)
     
            menu.addAction(new_action)
            menu.addAction(close_action)
     
     
            #point 调用
            menu.exec_(evt.globalPos())
     
     
    if __name__=='__main__':
        import sys
        app=QApplication(sys.argv)
     
        win=QWidget()
        win.setGeometry(300,300,500,400)
     
        def show_menu(point):
            menu=QMenu(win)         #将菜单绑定到窗体上
     
            new_action=QAction('打开',menu)
            close_action=QAction('关闭',menu)
     
            menu.addAction(new_action)
            menu.addAction(close_action)
     
            #point 调用
            desk_point=win.mapToGlobal(point)       #局部坐标映射到桌面坐标
            #print(point)
            # print(desk_point)
            menu.exec_(desk_point)
     
     
     
        win.setContextMenuPolicy(Qt.CustomContextMenu)          #定义右键策略
        win.customContextMenuRequested.connect(show_menu)       #发射信号,会传递point
     
     
        win.show()
     
        sys.exit(app.exec_())
    

你可能感兴趣的:(PyQt5,pyqt5,python,GUI,python,pyqt,qt)