创建菜单栏、工具栏和状态栏可以直接通过代码实现,也可以通过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. (11)ssh免密登录配置

    ***在Linux命令行中登录到另一台虚拟机(需要用到ssh协议) Linux中默认有ssh的服务器端和客户端,客户端的名字就叫ssh 前提是当前使用的用户名在待连接的虚拟机中存在 格式:  ssh ...

  2. azkaban的简单使用

    简单使用 create job 右上角 project创建成功 创建job并上传至该project [root@localhost ~]# cat command.job #command.job t ...

  3. 4-17疑难点 c语言之【结构体对齐】

    今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...

  4. win10以管理员身份运行cmd方法

    win10以管理员身份运行cmd方法 win8win10以管理员身份运行cmd方法1.直接到 C:\Windows\System32 下面找cmd.exe 右键以管理员方式打开就可以了 2.按WIN+ ...

  5. mysql 函数获取子节点

    DELIMITER $$ USE `topsale`$$ DROP FUNCTION IF EXISTS `getShopIdByUserId`$$ CREATE DEFINER=`root`@`%` ...

  6. Matplotlib-动画

    Animation 动画 定义方程 参数设置 # Animation 动画 # 定义方程 # 使用matplotlib做动画也是可以的,我们使用其中一种方式,function animation来说说 ...

  7. 【398】COMP9021 - Polynomial

    构建 Polynomial 类,实现 +, -, , / and +=, -=, =, /= 参考:如何用python编程求解二元一次方程组.如x+y=3;x-y=1 参考:python对重载运算符的 ...

  8. 用 ghostscript 转化PDF文件为图片 的参数设置

    example: gswin32 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jp ...

  9. 使用hexo在GitHub上无法上传博客

    原以为是秘钥或者其他错误,后来发现是邮箱设置的问题 在GitHub的你账号网页上右上角,个人的登录退出的位置,找到setting: setting->emails->Keep my ema ...

  10. iOS10以下版本不支持swiper

    解决办法,降低swiper4*版本引用低版本如3.4.2可以兼容iOS8,