菜单和工具栏

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

主窗口

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, 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()方法在状态栏上显示一条信息。

程序预览:

菜单栏

菜单栏是非常常用的。是一组命令的集合(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 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()创建菜单栏。这里创建了一个菜单栏,并在上面添加了一个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, 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_())

这个例子里,有两个子菜单,一个在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, QApplication

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)

默认设置为选中状态。

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, 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.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 QIcon

class 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 QIcon

class 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的中间区域。这个组件或占满所有剩余的区域。

程序预览:

python菜单栏_pyqt5——菜单和工具栏相关推荐

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

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

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

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

  3. python菜单栏添加子菜单_python添加菜单图文讲解

    分享一个基于tkinter的菜单程序添加操作,希望对需要的朋友有帮助. 打开python集成开发环境,使用 from tkinter import Tk from tkinter import Men ...

  4. 安装的python没有菜单栏_新手求助 为什么mac安装python后打开idle没有工具栏?

    查看: 6662|回复: 10 [已解决]新手求助 为什么mac安装python后打开idle没有工具栏? 电梯直达 发表于 2016-9-26 11:09:35 | 只看该作者 |倒序浏览 |阅读模 ...

  5. python图形界面化编程GUI(三)事件绑定(鼠标和键盘、OptionMenu、scale、颜色、文件对话框、菜单和工具栏、ttk子模块)

    常用组件汇总 Tkinter类 名称 简介 Toplevel 顶层 容器类,可用于为其他组件提供单独的容器,类似于窗口 Button 按钮 代表按钮组件 Canvas 画布 提供绘图功能,包括直线.矩 ...

  6. 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏

    2019独角兽企业重金招聘Python工程师标准>>> 众所周知,从微软的Office 12(也就是我们所说的Office 2007)开始,软件界面采用了Ribbon界面,又叫做功能 ...

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

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

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

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

  9. pyqt5——菜单和工具栏

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

最新文章

  1. 计算机 电脑 系统安装教程,安装电脑的操作系统的方法
  2. Original error was: DLL load failed: 找不到指定的模块。--解决办法
  3. Pwn_9 作业讲解
  4. 一些使用javap反编译出来的结果分析
  5. 进入opencv内部函数调试
  6. 为CListBox加上智能水平滚动条
  7. 《Python编程从入门到实践》记录之函数编写指南
  8. golang 编辑xml 内容_Linux 搭建 golang 开发环境
  9. yconsole使用说明
  10. Spark 机器学习 —— ALS
  11. robocopy 备份_windows下使用RoboCopy命令进行文件夹增量备份
  12. 数据结构(C语言版)严蔚敏李冬梅(第2版)课后习题答案
  13. 思维导图—Git命令全集
  14. QQ空间扫码登录协议 Java
  15. html 京东购物车样式,购物车css样式效果
  16. 程序员的自我吐槽,来自专业人士的扎心吐槽!
  17. 关于小米路由r3g,TTL刷openwrt救砖几个坑
  18. 清除composite里的子控件
  19. 2023英伟达显卡排名天梯图(已更新)
  20. 图解MySQL在Linux下的安装与配置

热门文章

  1. 15个优雅的Python编程技巧,掌握后瞬间玩转Python
  2. 北妈每日总结: 2019年前端人必须学会写博客
  3. 计算机网络抓包参考文献,计算机网络课程设计二(网络抓包与分析)
  4. vlc集成c#_C#WinForm程序调用VLC异常
  5. 机器学习笔记八之机器学习系统设计
  6. 吴恩达机器学习笔记五之神经网络
  7. 如何在 Mac 上切换语言
  8. 干货!这可能是最全的IntelliJ IDEA For Mac快捷键说明,建议收藏!
  9. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
  10. P3383 【模板】线性筛素数