三、PyQt5不同方法创建菜单栏、工具栏和状态栏
创建菜单栏、工具栏和状态栏可以直接通过代码实现,也可以通过Qt Designer中的属性编辑器等实现。通过两种方法的学习可以加深理解,更好的掌握PyQt5。
一、菜单栏与状态栏
状态栏的设置比较简单,在设置菜单栏的同时,就可以实现状态栏显示的设置。
1.1 下拉菜单与子菜单
菜单栏位于窗体标题栏的下方,通过QMenu类可添加菜单栏的小控件,创建上下文菜单和弹出菜单。每个Qmenu对象都可以包含QAction对象。单击QAction按钮时,QMenu对象就会发射triggered信号实现功能需求。在举例说明之前,我们先了解下部分重要的方法。
| menuBar() | 返回窗口的QMenu对象 |
| addMenu() | 在菜单栏里添加一个新的Qmenu对象 |
| addAction() | 向QMenu小空间中添加一个操作按钮,其中包含文本或图形 |
| addSeperator() | 设置按钮的状态(禁用/启用) |
| setShortcut() | 设置快捷键 |
| setTitle() | 设置菜单项的文本 |
| setText | 设置控件的标题 |
| text() | 返回QAction对象关联的文本 |
| title() | 返回QMenu控件的标题 |
| setStatusTip() | 设置状态栏信息文本 |
下面是案例代码
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon class MyWindow(QMainWindow): def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,500,400)
self.setWindowTitle('菜单栏例子')
self.setWindowIcon(QIcon('chuan.ico')) menubar = self.menuBar()
file = menubar.addMenu('文件')
"""设置一级菜单打开按钮, 这个操作按钮是QAction对象"""
open1 = QAction(QIcon('open.png'),'打开',self) #为打开按钮设置图标,显示文本
open1.setShortcut('ctrl+o') #设置快捷键
open1.setStatusTip('这是打开按钮') #设置状态栏信息
file.addAction(open1) #添加打开按钮 """设置编辑按钮,这个操作按钮是字符串"""
edit=file.addMenu('编辑')
edit.addAction('复制') #设置二级菜单复制
edit.addAction('粘贴') #设置二级菜单粘贴 """另一种方法设置二级菜单"""
save = QMenu('保存')
al_save = QAction('另存为',self)
save.addAction(al_save)
file.addMenu(save) """设置退出按钮"""
quit_menubar = QAction(QIcon('close.ico'),'退出',self)
quit_menubar.setShortcut('ctrl+q')
quit_menubar.setStatusTip('这是退出')
file.addAction(quit_menubar)
quit_menubar.triggered.connect(qApp.quit) self.statusBar() #初始化状态栏
self.center_show() def center_show(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft()) if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
下拉菜单与弹出菜单

菜单中的操作按钮可以是字符串或QAction对象。在上面的例子中,“打开”和“退出”按钮都是QAction对象,而“编辑”按钮则是字符串对象。
还有一点需要注意,一定要加上self.statusBar()将其实例化,否则无法显示状态栏信息。这一命令的位置可以任意放在设置各菜单按钮的状态栏信息的前面或后面。
通过Qt Designer则可以很快实现上述过程。

首先,在属性编辑器里,可以实现对窗体大小,标题,图标以及窗体状态栏的设置。但是在对下拉菜单时不能直接添加图片的(窗体也不能直接添加图片),需要在PyQt开发目录下添加qrc文件。方法如下:
(1)点击右下角资源浏览器,新建一个qrc文件,并设置前缀为pic,然后添加图片资源

(2)在窗体左上角输入菜单项“文件”。

(3)在动作编辑器中新建下拉菜单动作,并添加图片、快捷键,状态栏信息等

(4)将编辑好的动作拖到菜单项中,就可以完成操作。
3.2 勾选菜单
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication,QDesktopWidget
from PyQt5.QtGui import QIcon class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300, 300, 500, 400)
self.setWindowTitle('勾选菜单示例')
self.setWindowIcon(QIcon('chuan.ico'))
self.center_show() self.statusbar = self.statusBar() menubar = self.menuBar()
file = menubar.addMenu('文件') sel_menubar = QAction('确认',self,checkable=True) #checkable=True设置为可勾选
sel_menubar.setStatusTip('已勾选菜单按钮')
sel_menubar.setShortcut('ctrl+l')
sel_menubar.setChecked(True) #默认为已勾选
file.addAction(sel_menubar) sel_menubar.triggered.connect(self.toggleMenu) def toggleMenu(self, state):
if state:
self.statusbar.show()
else:
self.statusbar.hide() def center_show(self):
qr = self.frameGeometry() #获得主窗口大小
cp = QDesktopWidget().availableGeometry().center() #获取显示器分辨率,并找到中间点
qr.moveCenter(cp) #将窗口中点放在屏幕中间
self.move(qr.topLeft()) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
勾选菜单示例
QAction不仅可以实现图片的插入,还可以通过checkable=True/False设置按钮是否可勾选。setChecked(True)可以设置勾选菜单初始化是否勾选。本例中还添加了toggleMenu()方法,实现了勾选与否时,状态栏信息的显示不同。
如何使用Qt Designer创建勾选菜单不再赘述,仿照上例使用动作编辑器即可。
3.3 右键菜单
import sys
from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication
from PyQt5.QtGui import QIcon class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self): self.setGeometry(300, 300, 500, 400)
self.setWindowTitle('Context menu')
self.setWindowIcon(QIcon('chuan.ico')) def contextMenuEvent(self, event): cmenu = QMenu(self) newAct = cmenu.addAction("新建")
opnAct = cmenu.addAction("打开")
quitAct = cmenu.addAction("退出")
action = cmenu.exec_(self.mapToGlobal(event.pos())) if action == quitAct:
qApp.quit() if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
右键菜单
这里使用contextMenuEvent()方法实现菜单创建。使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。maptoGlobal()方法把当前组件的相对坐标转换为窗口的绝对坐标。
二、工具栏
工具栏的添加与菜单栏类似,无须赘述。不过注意一点,工具栏添加后只显示图标,不会显示文本。这一点和我们常用的软件一样。
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('工具栏')
self.setWindowIcon(QIcon('chuan.ico')) exitAct = QAction(QIcon('close.ico'), '退出', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit) self.toolbar = self.addToolBar('退出')
self.toolbar.addAction(exitAct) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
工具栏示例
使用Qt Designer添加工具栏的方法同样和添加菜单类似。只是首先在窗体是单击右键,选择添加工具栏,然后就可以通过动作编辑器添加动作,通过属性编辑器设置图标

三、PyQt5不同方法创建菜单栏、工具栏和状态栏的更多相关文章
- PyQt5+Eric6开发的一个使用菜单栏、工具栏和状态栏的示例
前言 在做一个数据分析的桌面端程序遇到一些问题,这里简单整理下,分享出来供使用者参考. 1.网上查使用PyQt5工具栏的示例,发现很多只是一个简单的退出功能,如果有几个按钮如何处理?如何区分点击的究竟 ...
- PyQt5的菜单栏、工具栏和状态栏
1.创建菜单栏import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore impor ...
- Qt 学习之路 :菜单栏、工具栏和状态栏
在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...
- Qt 学习之路 2(12):菜单栏、工具栏和状态栏
Home / Qt 学习之路 2 / Qt 学习之路 2(12):菜单栏.工具栏和状态栏 Qt 学习之路 2(12):菜单栏.工具栏和状态栏 豆子 2012年9月10日 Qt 学习之路 2 2 ...
- 【Qt开发】菜单栏,工具栏和状态栏
概述 菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Desig ...
- PyQt5教程——菜单和工具栏(3)
PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...
- C#开发PACS医学影像处理系统(三):界面布局之工具栏
工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中 Style="{StaticResource ButtonS ...
- Qt之菜单栏工具栏入门
菜单栏基本操作 创建菜单栏 QMenuBar *menuBar = new QMenuBar(this); //1.创建菜单栏 menuBar->setGeometry(,,width(),); ...
- C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体
MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd 封装了工具栏控件相关操作 CToolBar - 父类是CControlBar 封装了工具栏和框架窗体之间的关系 工具栏使用: ...
随机推荐
- JWT,oAuth和SSO的讨论
JWT,oAuth和SSO的讨论 背景 Single Sign On有很多成熟的方案.基于Session的服务常使用缓存Session信息在一个缓存服务上(例如redis)以实现SSO,每个微服务使用 ...
- Monkey测试简介
1.Monkey测试简介monkey是安卓命令行工具,它向系统发送伪随机的用户事件,例如:按键的输入.触摸屏的输入.手势输入等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常.因此,mo ...
- Django ORM queryset object 解释(子查询和join连表查询的结果)
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) --- ...
- http协议,servlet的生命周期
1.http协议(http协议是无状态的) http协议是指计算机通信网络中两台计算机进行通信必须共同遵守的规定或规则,它允许将超文本标记语言(html)文档从web服务器传送到客户端的浏览器(目前我 ...
- Java面试题 BAT 大公司面试题整理总结!
本文只列出了问题,答案还是需要需要自己的总结,很多时候自己总结出来的语言在面试时比硬背的效果好很多. 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的 ...
- if判断,switch语句
if ; else if; else; 判断操作: 格式示例: public class scanner { public static void main(String[] args){ int a ...
- 尚硅谷springboot学习36-自定义starter
自定义一个starter要引一个依赖,即我们自己写的自动配置,在这个自动配置里写我们的自动配置类,属性类等 自动配置类开始类似这样 @Configuration //指定这个类是一个配置类 @Cond ...
- 【C++】C++string类总结
一.string的初始化 首先,为了在程序中使用string类型,必须包含头文件 <string>.如下: #include <string> 注意这里不是string.h,s ...
- Apple watch ,小米微信通知
Applewatch怎么显示微信通知?iWatch显示微信消息通知设置方法.大家都知道Applewatch上收到微信消息,iWatch是不会显示通知的,需要用户自行设置才行.下面小编来教大家如何设置A ...
- 20175213 2018-2019-2 《Java程序设计》第7周学习总结
教材学习内容总结 (1)String (char a[])用一个字符数组a创建一个String对象. (2)String(char a[],int startIndex,int count) 提取字符 ...