创建菜单栏、工具栏和状态栏可以直接通过代码实现,也可以通过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不同方法创建菜单栏、工具栏和状态栏的更多相关文章

  1. PyQt5+Eric6开发的一个使用菜单栏、工具栏和状态栏的示例

    前言 在做一个数据分析的桌面端程序遇到一些问题,这里简单整理下,分享出来供使用者参考. 1.网上查使用PyQt5工具栏的示例,发现很多只是一个简单的退出功能,如果有几个按钮如何处理?如何区分点击的究竟 ...

  2. PyQt5的菜单栏、工具栏和状态栏

    1.创建菜单栏import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore impor ...

  3. Qt 学习之路 :菜单栏、工具栏和状态栏

    在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...

  4. Qt 学习之路 2(12):菜单栏、工具栏和状态栏

    Home / Qt 学习之路 2 / Qt 学习之路 2(12):菜单栏.工具栏和状态栏 Qt 学习之路 2(12):菜单栏.工具栏和状态栏  豆子  2012年9月10日  Qt 学习之路 2  2 ...

  5. 【Qt开发】菜单栏,工具栏和状态栏

    概述 菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Desig ...

  6. PyQt5教程——菜单和工具栏(3)

    PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...

  7. C#开发PACS医学影像处理系统(三):界面布局之工具栏

    工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中  Style="{StaticResource ButtonS ...

  8. Qt之菜单栏工具栏入门

    菜单栏基本操作 创建菜单栏 QMenuBar *menuBar = new QMenuBar(this); //1.创建菜单栏 menuBar->setGeometry(,,width(),); ...

  9. C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体

    MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd  封装了工具栏控件相关操作 CToolBar - 父类是CControlBar  封装了工具栏和框架窗体之间的关系 工具栏使用: ...

随机推荐

  1. 新的blog站地址

    自己用Jekyll搭建了一个静态blog网站 以后的blog随笔就更新在:https:/blog.hudunsec.cn

  2. HTML5 前端将 dom 元素转化为 Word,EXCEL 或者图片 并实现下载

    < 一 >  word  1,依赖于 jquery.html.word.js 插件 => https://blog-static.cnblogs.com/files/lovling/ ...

  3. rest_famework 增删改查初第二阶段(中级,此阶段是优化初级阶段的代码)的使用

    url: re_path('authors/$', views.AuthorView.as_view()),re_path('authors/(\d+)/$', views.AuthorDetailV ...

  4. Django项目创建

    一.创建方式 1.命令行创建: 2.pycharm创建项目: 二.创建MySQL数据库 三.修改配置文件链接数据库 修改python连接数据库方式 四.Django配置 1.添加app项目 2.修改h ...

  5. HTML - form (转)

    自:http://www.runoob.com <form> 标签 标签定义及使用说明 <form> 标签用于创建供用户输入的 HTML 表单. <form> 元素 ...

  6. 在Maven中新增自定的jar包

    引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介 ...

  7. 【C++】C++中int与string的相互转换

    一.int转string 1.c++11标准增加了全局函数std::to_string: string to_string (int val); string to_string (long val) ...

  8. 20175213 2018-2019-2 《Java程序设计》第6周学习总结

    教材学习内容总结 1.第七章:内部类与异常类 ①.内部类和外嵌类之间的重要关系: ·内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. ·内部类的类体中不可以声明类变 ...

  9. SSM商城项目(十二)

    1.   学习计划 1.购物车实现 2.未登录状态下使用购物车 3.登录状态下使用购物车 2.   购物车的实现 2.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以 ...

  10. .Net23种设计模式

    C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...