菜单和工具栏

这个章节,我们会创建状态栏、菜单和工具栏。菜单是一组位于菜单栏的命令。工具栏是应用的一些常用工具按钮。状态栏显示一些状态信息,通常在应用的底部。

主窗口

QMainWindow提供了主窗口的功能,使用它能创建一些简单的状态栏、工具栏和菜单栏。

主窗口是下面这些窗口的合称,所以教程在最下方。

状态栏

状态栏是用来显示应用的状态信息的组件。

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a statusbar.Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, QApplicationclass 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()方法在状态栏上显示一条信息。

程序预览:

菜单栏

菜单栏是非常常用的。是一组命令的集合(Mac OS下状态栏的显示不一样,为了得到最相似的外观,我们增加了一句menubar.setNativeMenuBar(False))。

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a menubar. The
menubar has one menu with an exit action.Author: Jan Bodnar
Website: zetcode.com
Last edited: January 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIconclass 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()创建菜单栏。这里创建了一个菜单栏,并在上面添加了一个file菜单,并关联了点击退出应用的事件。

程序预览:

子菜单

子菜单是嵌套在菜单里面的二级或者三级等的菜单。

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a submenu.Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplicationclass 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_())

这个例子里,有两个子菜单,一个在file菜单下面,一个在file的import下面。

impMenu = QMenu('Import', self)

使用QMenu创建一个新菜单。

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

使用addAction添加一个动作。

程序预览:

勾选菜单

下面是一个能勾选菜单的例子

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a checkable menu.Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QApplicationclass 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)

默认设置为选中状态。

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

依据选中状态切换状态栏的显示与否。
程序预览:

右键菜单

右键菜单也叫弹出框(!?),是在某些场合下显示的一组命令。例如,Opera浏览器里,网页上的右键菜单里会有刷新,返回或者查看页面源代码。如果在工具栏上右键,会得到一个不同的用来管理工具栏的菜单。

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a context menu.Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplicationclass 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.mapToGlobal(event.pos()))

使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。mapToGlobal()方法把当前组件的相对坐标转换为窗口(window)的绝对坐标。

if action == quitAct:qApp.quit()

如果右键菜单里触发了事件,也就触发了退出事件,执行关闭菜单行为。

程序预览:

工具栏

菜单栏包含了所有的命令,工具栏就是常用的命令的集合。

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a toolbar.
The toolbar has one action, which
terminates the application, if triggered.Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):               exitAct = QAction(QIcon('exit24.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('exit24.png'), 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit)

和上面的菜单栏差不多,这里使用了一个行为对象,这个对象绑定了一个标签,一个图标和一个快捷键。这些行为被触发的时候,会调用QtGui.QMainWindow的quit方法退出应用。

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

把工具栏展示出来。

程序预览:

主窗口

主窗口就是上面三种栏目的总称,现在我们把上面的三种栏在一个应用里展示出来。

首先要自己弄个小图标,命名为exit24.png

#!/usr/bin/python3
# -*- coding: utf-8 -*-"""
ZetCode PyQt5 tutorial This program creates a skeleton of
a classic GUI application with a menubar,
toolbar, statusbar, and a central widget. Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017学习交流:923414804
"""import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication
from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):               textEdit = QTextEdit()self.setCentralWidget(textEdit)exitAct = QAction(QIcon('exit24.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_())

上面的代码创建了一个很经典的菜单框架,有右键菜单,工具栏和状态栏。

textEdit = QTextEdit()
self.setCentralWidget(textEdit)

这里创建了一个文本编辑区域,并把它放在QMainWindow的中间区域。这个组件或占满所有剩余的区域。

程序预览:

转载于:https://www.cnblogs.com/paisenpython/p/10254635.html

pyqt5——菜单和工具栏相关推荐

  1. pyqt5 -——菜单和工具栏

    一. 状态栏 # -*- coding: utf-8 -*-# @Time : 2018/12/22 12:37# @Author : Bo# @Email : mat_wu@163.com# @Fi ...

  2. Python 小白从零开始 PyQt5 项目实战(2)菜单和工具栏

    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战. 什么叫从零开始?从软件安装.环境配置开始.不跳过一个细节,不漏掉一行代码,不省略一个例图. ...

  3. PyQt5可视化编程-菜单和工具栏

    一.简介 PyQt5 是Digia的一套Qt5与python绑定的应用框架,同时支持2.x和3.x.本教程使用的是3.x.Qt库由Riverbank Computing开发, 是最强大的GUI库之一 ...

  4. python菜单栏_pyqt5——菜单和工具栏

    菜单和工具栏 这个章节,我们会创建状态栏.菜单和工具栏.菜单是一组位于菜单栏的命令.工具栏是应用的一些常用工具按钮.状态栏显示一些状态信息,通常在应用的底部. 主窗口 QMainWindow提供了主窗 ...

  5. 在PyQt中构建 Python 菜单栏、菜单和工具栏

    摘要:菜单.工具栏和状态栏是大多数GUI 应用程序的常见且重要的图形组件.您可以使用它们为您的用户提供一种快速访问应用程序选项和功能的方法. 本文分享自华为云社区<Python 和 PyQt:创 ...

  6. 第四章 菜单、工具栏和状态栏(第8课)

    第8课:菜单.工具栏和状态栏 概述: 三者都是界面元素:Windows文档应用程序框架的界面元素 三者是框架窗口的组成部分 MFC中,用框架窗口类CMainFrame来控制这些框架界面元素→三者的基本 ...

  7. 2017-4-26 winform 菜单和工具栏

    如何让radiobutton进行分组: 用Panel    相当于div 菜单和工具栏: MenuStrip(菜单条) ShortcutKeys-------------------------与菜单 ...

  8. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  9. 【MFC】带下拉菜单的工具栏

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 本实例是对工具栏功能的 ...

最新文章

  1. usaco Controlling Companies
  2. 仿即刻的点赞滚动放大波纹图标
  3. PHP使用phpexcel读取excel文件
  4. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...
  5. python输入隔行的数组_python-使用间隔掩码numpy数组
  6. react项目如何按需加载antdDesign组件
  7. 斯坦福的著名小兔子模型的点云数据_传统方法的点云分割以及PCL中分割模块
  8. 作者:吴甘沙,英特尔中国研究院院长。
  9. pom.xml文件第一行报错_Python文件读写指南
  10. 重磅官宣:腾讯宣布再投500亿元助力共同富裕
  11. 静态html如何写入文件,静态HTML模板渲染
  12. html特殊字符转义倒三角,html,转义字符对照表,部分x
  13. hadoop 网页监控
  14. 计算机电子贺卡制作圣诞节,如何制作电子圣诞贺卡?贺卡制作步骤
  15. 加一 — Python
  16. 台式计算机启动时 每次按f1,电脑开机时总是提示要按F1?云骑士告诉你如何解决...
  17. 网络上的计算机病毒怎么办,电脑中病毒了怎么办
  18. 超详细如何配置NAT
  19. Fabric学习笔记(六) - chaincode开发模式
  20. 四川大学计算机学院硕士毕业要求,四川大学计算机学院(软件学院)2020年非全日制硕士研究生接受调剂生的通知...

热门文章

  1. 643 Maximum Average Subarray I
  2. shell中$XX相关
  3. jQuery插件开发的两种方法及$.fn.extend的详解
  4. spring解决ajax跨域问题
  5. iOS APP提交上架最新流程(转)
  6. Google Map App 问题集锦
  7. Oracle DBWR,LGWR,CKPT,ARCH 触发条件 总结
  8. Oracle中的date与timestamp
  9. 使用jquery.qrcode生成二维码(转)
  10. JQuery操作CheckBox和Radio