对PyQt5中的菜单栏和工具栏实例详解


Posted in Python onJune 20, 2019

在这一部分,我们学习创建状态栏,菜单栏和工具栏。一个菜单是位于菜单栏的一组命令。一个工具栏有一些按钮,这些按钮在应用程序中拥有一些常用命令。状态栏显示状态信息,通常位于应用窗口下方。

QMainWindow

QMainWindow类提供了一个主应用窗口。这允许我们创建一个带有状态栏,工具栏和菜单栏的经典程序框架。

Statusbar(状态栏)

一个状态栏是用于显示状态信息的一个组件。

#!/usr/bin/python3
# -*- coding:utf-8 -*- 

  import sys
  from PyQt5.QtWidgets import QMainWindow, QApplication

  class Example(QMainWindow):

    def __init__(self):
      super().__init__()

      self.initUI()

    def initUI(self):
      self.statusBar().showMessage("Ready")

      self.setGeometry(300,300,250,150)
      self.setWindowTitle("StatusBar")
      self.show()

  if __name__ == '__main__':
    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

状态栏在QMainWindow组件的帮助下被创建。

self.statusBar().showMessage("Ready")

为了获取状态栏,我们调用类QtGui.QMainWindow的statusBar()方法。该方法的第一个调用创建一个状态栏。子序列调用返回状态栏对象。showMessage()展示在状态栏上的信息。

下面是这个小例子程序的运行结果:

对PyQt5中的菜单栏和工具栏实例详解

简单的菜单

菜单栏是GUI应用程序的通用组件。他是一组位于多个菜单的命令。(Mac OS以不同的方式对待菜单栏。为了获得相似的输出,我们可以添加下列一行:menubar.setNativeMenubar(False)。)

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow,QAction, QApplication, qApp
from PyQt5.QtGui import QIcon

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

    self.initUI()

  def initUI(self):
    exitAct = QAction(QIcon('exit.png'),'&Exit',self)
    exitAct.setShortcut('Ctrl+Q')
    exitAct.setStatusTip("Exit application")
    exitAct.triggered.connect(qApp.quit)

    self.statusBar()

    menubar = self.menuBar()

    fileMenu = menubar.addMenu("&File")
    fileMenu.addAction(exitAct)

    self.setGeometry(300,300,300,200)
    self.setWindowTitle("Simple menu")
    self.show()

if __name__ == '__main__':

  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

在上面的例子程序中,我们创建了一个带有一个菜单的菜单栏。这个菜单包含一个动作,如果选中的话,将会终止该应用程序。当然,也创建了一个状态栏。这个动作也可以使用Ctrl+Q快捷键。

exitAct = QAction(QIcon("exit.png"),"&Exit",self)
exitAct.setShortcut("Ctrl+Q")
exitAct.setStatusTip("Exit application")

QAction是一个运行在菜单栏,工具栏和定制键盘快捷键的抽象类。在上面三行中,我们使用特定的图标和一个'Exit'标签创建了一个行为。进一步说,一个快捷键为了这个行为被定义。第三行创建了一个状态提示,当鼠标经过该菜单选项的时候,被显示在状态栏上。

exitAct.triggered.connect(qApp.quit)

当我们选中这个特定的行为的时候,一个触发的信号被提交。该信号被连接到QApplication组件的quit()方法。这个会终止这个程序。

menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAct)

menuBar()方法创建了一个菜单栏。我们使用addMenu()创建了一个文件按钮,并且使用addAction()方法添加一个行为。

下面是该小例子的截图:

![enter description here][2

子菜单

一个子菜单是位于另外一个菜单中的一个菜单。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication

class Example(QMainWindow):

  def __init__(self):
    super().__init__()

    self.initUI()

  def initUI(self):
    menubar = self.menuBar()
    fileMenu = menubar.addMenu("File")

    impMenu = QMenu("Import",self)
    impAct = QAction("Import mail",self)
    impMenu.addAction(impAct)

    newAct = QAction("New", self)

    fileMenu.addAction(newAct)
    fileMenu.addMenu(impMenu)

    self.setGeometry(300,300,300,200)
    self.setWindowTitle("Submenu")

    self.show()

if __name__ == '__main__':

  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

在这个例子中,我们有两个菜单选项;一个位于文件菜单中,另一个位于文件的Import子菜单中。

impMenu = QMenu("Import", self)

新的菜单使用QMenu创建。

impAct = QAction("Import mail", self)
impMenu.addAction(impAct)

一个行为通过使用addAction()被添加到子菜单中。

对PyQt5中的菜单栏和工具栏实例详解

选项菜单

在下面的例子中,我们创建了一个按钮可以被选中或者是不被选中。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QAction

class Example(QMainWindow):

  def __init__(self):
    super().__init__()

    self.initUI()

  def initUI(self):

    self.statusbar = self.statusBar()
    self.statusbar.showMessage("Ready")

    menubar = self.menuBar()
    viewMenu = menubar.addMenu("View")

    viewStatAct = QAction("View statusbar",self,checkable=True)
    viewStatAct.setStatusTip("View statusbar")
    viewStatAct.setChecked(True)
    viewStatAct.triggered.connect(self.toggleMenu)

    viewMenu.addAction(viewStatAct)

    self.setGeometry(300,300,300,200)
    self.setWindowTitle("Check menu")
    self.show()

  def toggleMenu(self,state):
    if state:
      self.statusbar.show()
    else:
      self.statusbar.hide()


if __name__ == "__main__":
  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

这个代码例子创建了带有一个行为的视图菜单。这个行为显示或者是隐藏状态栏。当状态栏可视的时候,菜单选项被选中。

viewStatAct = QAction('View statusbar', self, checkable=True)

使用checkable选项,我们创建了一个可选择菜单。

viewStatAct.setChecked(True)

因为状态栏在一开始的时候是可视的,我们使用setChecked()方法来设置该行为。

def toggleMenu(self, state):
  if state:
    self.statusbar.show()
  else:
    self.statusbar.hide()

依赖于行为选中的状态,我们设置状态栏是否显示。

对PyQt5中的菜单栏和工具栏实例详解

上下文菜单

一个上下文菜单,也被称作弹出菜单,一个出现在一些上下文中的一个命令列表。例如,在一个Opera网页浏览器中,当你在一个网页中右击的时候,我们获得一个上下文菜单。在这里我们可以重新加载一个页面,回退,或者是查看页面源码。如果我们右击一个工具栏,我们将会得到管理工具栏的另一个上下文菜单。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, qApp,QMenu,QApplication

class Example(QMainWindow):

  def __init__(self):
    super().__init__()

    self.initUI()

  def initUI(self):
    self.setGeometry(300,300,300,200)
    self.setWindowTitle("Context menu")

    self.show()

  def contextMenuEvent(self,event):
    cmenu = QMenu(self)

    newAct = cmenu.addAction("New")
    opnAct = cmenu.addAction("Open")
    quitAct = cmenu.addAction("Quit")
    action = cmenu.exec_(self.mapToGlobal(event.pos()))

    if action == quitAct:
      qApp.quit()

if __name__ == '__main__':
  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

为了能够使用上下文菜单,我们必须重新集成contextMenuEvent()方法。

action = cmenu.exec_(self.mapTpGlobal(event.pos()))

该上下文菜单被exec_()方法显示。他们从事件对象中获得鼠标指针的坐标。mapToGlobal()方法传递组件的坐标到全局的屏幕坐标。

if action == quitAct:
  qApp.quit()

如果从上下文菜单返回的行为等于退出行为,则程序被终止。

工具栏

在一个应用程序中,菜单栏组织了所有的命令。工具栏提供了常用命令的快速访问途径。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp,QApplication
from PyQt5.QtGui import QIcon

class Example(QMainWindow):

  def __init__(self):
    super().__init__()

    self.initUI()

  def initUI(self):

    exitAct = QAction(QIcon("exit.png"),"Exit",self)
    exitAct.setShortcut("Ctrl+Q")
    exitAct.triggered.connect(qApp.quit)

    self.toolbar = self.addToolBar("Exit")
    self.toolbar.addAction(exitAct)

    self.setGeometry(300,300,300,200)
    self.setWindowTitle("Toolbar")
    self.show()


if __name__ == '__main__':
  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

在上面的例子中,我们创建了一个简单的工具栏。工具栏有一个工具行为,一个退出行为,当触发的时候终止程序。

exitAct = QAction(QIcon("exit.png"),"Exit",self)
    exitAct.setShortcut("Ctrl+Q")
    exitAct.triggered.connect(qApp.quit)

和上面例子中的菜单栏一样,我们创建了一个行为对象。该对象有一个标签,图标和一个快捷方式。Qt.QMainWindow中的一个quit()方法被连接到触发信号中。

self.toolbar = self.addToolBar("Exit")
   self.toolbar.addAction(exitAct)

工具栏被addToolBar()被创建。我们使用addAction()方法添加一个行为对象到工具栏中。

把他们放到一起

在最后一个例子中,我们将会创建一个菜单栏,工具栏和一个状态栏。我们也将会创建一个中心的组件。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction,QApplication
from PyQt5.QtGui import QIcon

class Example(QMainWindow):

  def __init__(self):
    super().__init__()

    self.initUI()

  def initUI(self):

    textEdit = QTextEdit()
    self.setCentralWidget(textEdit)

    exitAct = QAction(QIcon("exit.png"),"Exit",self)
    exitAct.setShortcut("Ctrl+Q")
    exitAct.setStatusTip("Exit application")
    exitAct.triggered.connect(self.close)

    self.statusBar()

    menubar = self.menuBar()
    fileMenu = menubar.addMenu("&File")
    fileMenu.addAction(exitAct)

    toolbar = self.addToolBar("Exit")
    toolbar.addAction(exitAct)

    self.setGeometry(300,300,350,250)
    self.setWindowTitle("Main Window")
    self.show()

if __name__ == "__main__":

  app = QApplication(sys.argv)

  ex = Example()

  sys.exit(app.exec_())

在这里,我们创建了一个文本编辑组件。我们也把它设置成为QMainWindow的中心组件。中心组件被分为剩余空间的所有空间。

本篇章中,我们学习了菜单栏,工具栏和状态栏,还有一个主程序窗口。希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python语言技巧之三元运算符使用介绍
Mar 04 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
python语言中with as的用法使用详解
Feb 23 Python
Python实现线程状态监测简单示例
Mar 28 Python
Python读写及备份oracle数据库操作示例
May 17 Python
Python WEB应用部署的实现方法
Jan 02 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
python 利用opencv实现图像网络传输
Nov 12 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
PyQt QCombobox设置行高的方法
Jun 20 #Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 #Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 #Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 #Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 #Python
PyQt5笔记之弹出窗口大全
Jun 20 #Python
PyQt5创建一个新窗口的实例
Jun 20 #Python
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python中将字典转换为列表的方法
2016/09/21 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python如何实现一个刷网页小程序
2018/11/27 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
六一儿童节标语
2014/10/08 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
生产实习心得体会范文
2016/01/22 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
LeetCode189轮转数组python示例
2022/08/05 Python