三、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() 设置状态栏信息文本

下面是案例代码

 1 import sys
 2 from PyQt5.QtWidgets import *
 3 from PyQt5.QtGui import QIcon
 4
 5 class MyWindow(QMainWindow):
 6
 7     def __init__(self):
 8         super().__init__()
 9         self.initUI()
10
11     def initUI(self):
12         self.setGeometry(300,300,500,400)
13         self.setWindowTitle(‘菜单栏例子‘)
14         self.setWindowIcon(QIcon(‘chuan.ico‘))
15
16         menubar = self.menuBar()
17         file = menubar.addMenu(‘文件‘)
18         """设置一级菜单打开按钮, 这个操作按钮是QAction对象"""
19         open1 = QAction(QIcon(‘open.png‘),‘打开‘,self) #为打开按钮设置图标,显示文本
20         open1.setShortcut(‘ctrl+o‘) #设置快捷键
21         open1.setStatusTip(‘这是打开按钮‘) #设置状态栏信息
22         file.addAction(open1) #添加打开按钮
23
24         """设置编辑按钮,这个操作按钮是字符串"""
25         edit=file.addMenu(‘编辑‘)
26         edit.addAction(‘复制‘) #设置二级菜单复制
27         edit.addAction(‘粘贴‘) #设置二级菜单粘贴
28
29         """另一种方法设置二级菜单"""
30         save = QMenu(‘保存‘)
31         al_save = QAction(‘另存为‘,self)
32         save.addAction(al_save)
33         file.addMenu(save)
34
35
36         """设置退出按钮"""
37         quit_menubar = QAction(QIcon(‘close.ico‘),‘退出‘,self)
38         quit_menubar.setShortcut(‘ctrl+q‘)
39         quit_menubar.setStatusTip(‘这是退出‘)
40         file.addAction(quit_menubar)
41         quit_menubar.triggered.connect(qApp.quit)
42
43         self.statusBar() #初始化状态栏
44         self.center_show()
45
46
47     def center_show(self):
48         qr = self.frameGeometry()
49         cp = QDesktopWidget().availableGeometry().center()
50         qr.moveCenter(cp)
51         self.move(qr.topLeft())
52
53
54 if __name__ == "__main__":
55     app = QApplication(sys.argv)
56     win = MyWindow()
57     win.show()
58     sys.exit(app.exec_())

下拉菜单与弹出菜单

菜单中的操作按钮可以是字符串或QAction对象。在上面的例子中,“打开”和“退出”按钮都是QAction对象,而“编辑”按钮则是字符串对象。

还有一点需要注意,一定要加上self.statusBar()将其实例化,否则无法显示状态栏信息。这一命令的位置可以任意放在设置各菜单按钮的状态栏信息的前面或后面。

通过Qt Designer则可以很快实现上述过程。

首先,在属性编辑器里,可以实现对窗体大小,标题,图标以及窗体状态栏的设置。但是在对下拉菜单时不能直接添加图片的(窗体也不能直接添加图片),需要在PyQt开发目录下添加qrc文件。方法如下:

(1)点击右下角资源浏览器,新建一个qrc文件,并设置前缀为pic,然后添加图片资源

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

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

(4)将编辑好的动作拖到菜单项中,就可以完成操作。

3.2 勾选菜单

 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication,QDesktopWidget
 3 from PyQt5.QtGui import QIcon
 4
 5
 6 class MyWindow(QMainWindow):
 7     def __init__(self):
 8         super().__init__()
 9         self.initUI()
10
11     def initUI(self):
12         self.setGeometry(300, 300, 500, 400)
13         self.setWindowTitle(‘勾选菜单示例‘)
14         self.setWindowIcon(QIcon(‘chuan.ico‘))
15         self.center_show()
16
17         self.statusbar = self.statusBar()
18
19         menubar = self.menuBar()
20         file = menubar.addMenu(‘文件‘)
21
22         sel_menubar = QAction(‘确认‘,self,checkable=True) #checkable=True设置为可勾选
23         sel_menubar.setStatusTip(‘已勾选菜单按钮‘)
24         sel_menubar.setShortcut(‘ctrl+l‘)
25         sel_menubar.setChecked(True)  #默认为已勾选
26         file.addAction(sel_menubar)
27
28         sel_menubar.triggered.connect(self.toggleMenu)
29
30     def toggleMenu(self, state):
31         if state:
32             self.statusbar.show()
33         else:
34             self.statusbar.hide()
35
36     def center_show(self):
37         qr = self.frameGeometry()  #获得主窗口大小
38         cp = QDesktopWidget().availableGeometry().center() #获取显示器分辨率,并找到中间点
39         qr.moveCenter(cp) #将窗口中点放在屏幕中间
40         self.move(qr.topLeft())
41
42
43 if __name__ == ‘__main__‘:
44     app = QApplication(sys.argv)
45     win = MyWindow()
46     win.show()
47     sys.exit(app.exec_())

勾选菜单示例

QAction不仅可以实现图片的插入,还可以通过checkable=True/False设置按钮是否可勾选。setChecked(True)可以设置勾选菜单初始化是否勾选。本例中还添加了toggleMenu()方法,实现了勾选与否时,状态栏信息的显示不同。

如何使用Qt Designer创建勾选菜单不再赘述,仿照上例使用动作编辑器即可。

3.3 右键菜单

 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication
 3 from PyQt5.QtGui import QIcon
 4
 5 class MyWindow(QMainWindow):
 6     def __init__(self):
 7         super().__init__()
 8         self.initUI()
 9
10     def initUI(self):
11
12         self.setGeometry(300, 300, 500, 400)
13         self.setWindowTitle(‘Context menu‘)
14         self.setWindowIcon(QIcon(‘chuan.ico‘))
15
16     def contextMenuEvent(self, event):
17
18            cmenu = QMenu(self)
19
20            newAct = cmenu.addAction("新建")
21            opnAct = cmenu.addAction("打开")
22            quitAct = cmenu.addAction("退出")
23            action = cmenu.exec_(self.mapToGlobal(event.pos()))
24
25            if action == quitAct:
26                qApp.quit()
27
28
29 if __name__ == ‘__main__‘:
30     app = QApplication(sys.argv)
31     win = MyWindow()
32     win.show()
33     sys.exit(app.exec_())

右键菜单

这里使用contextMenuEvent()方法实现菜单创建。使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。maptoGlobal()方法把当前组件的相对坐标转换为窗口的绝对坐标。

二、工具栏

工具栏的添加与菜单栏类似,无须赘述。不过注意一点,工具栏添加后只显示图标,不会显示文本。这一点和我们常用的软件一样。

 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
 3 from PyQt5.QtGui import QIcon
 4
 5 class MyWindow(QMainWindow):
 6     def __init__(self):
 7         super().__init__()
 8         self.initUI()
 9
10     def initUI(self):
11         self.setGeometry(300, 300, 300, 200)
12         self.setWindowTitle(‘工具栏‘)
13         self.setWindowIcon(QIcon(‘chuan.ico‘))
14
15         exitAct = QAction(QIcon(‘close.ico‘), ‘退出‘, self)
16         exitAct.setShortcut(‘Ctrl+Q‘)
17         exitAct.triggered.connect(qApp.quit)
18
19         self.toolbar = self.addToolBar(‘退出‘)
20         self.toolbar.addAction(exitAct)
21
22
23 if __name__ == ‘__main__‘:
24     app = QApplication(sys.argv)
25     win = MyWindow()
26     win.show()
27     sys.exit(app.exec_())

工具栏示例

使用Qt Designer添加工具栏的方法同样和添加菜单类似。只是首先在窗体是单击右键,选择添加工具栏,然后就可以通过动作编辑器添加动作,通过属性编辑器设置图标



三、PyQt5不同方法创建菜单栏、工具栏和状态栏

原文地址:https://www.cnblogs.com/chuanxiaopang/p/10488975.html

时间: 2024-09-30 10:29:14

三、PyQt5不同方法创建菜单栏、工具栏和状态栏的相关文章

Qt学习三 - 菜单栏、工具栏、状态栏

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); /** QAction是Qt中用于添加动作的类, * 可以将它添加在菜单,作为一个菜单项,也可以添加到工具栏,作为一个工具栏按钮 * 其中参数一是设置该操作按钮的图标,":/images/icon"是资源文件的路径 * 参数二中"&"号代表设

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

在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一些细节问题,比如资源文件的使用.对象模型以及布局管理器.这一节则是详细介绍关于菜单栏.工具栏以及状态栏的相关内容. 我们假设窗口还是建立在QMainWindow类之上,这会让我们的开发简单许多.当然,在实际开发过程中,QMainWindow通常只作为“主窗口”,对话框窗口则更多地使用QDialog类.我们会在

MFC菜单、工具栏和状态栏

菜单:CMenu类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 CMenu类的主要成员函数        BOOL LoadMenu(UINT nIDResource);        加载菜单资源,并将其附加到CMenu对象上.参数nIDResource指定了要

MFC之窗口修改工具栏编程状态栏编程程序启动画面

1窗口外观的修改 (1)修改在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 修改标题:cs.style&=FWS_ADDTOTITLE; cs.lpszNamw="new title"; (2)窗口创建之后修改外观 在CMainframe::Create()中调用SetWindowLong(HWND hwnd,.....)根据参数修改指定的项 所有从CWnd派生的类都是窗口类在这些窗口类中都有一个公有的成员变量保存了和着个窗

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

MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd  封装了工具栏控件相关操作 CToolBar - 父类是CControlBar  封装了工具栏和框架窗口之间的关系 工具栏使用: //把工具栏对象定义为 CMyFrameWnd成员: CToolBar toolbar; //在窗口创建时,加载工具栏资源 int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpc) { toolbar.CreateEx(this,TBSTYLE_FLAT,WS_C

设计模式(三) : 创建型模式--工厂方法模式

工厂方法模式区别与简单工厂模式主要在于,factory中对对象的实例化延迟到了子类的factory中, 这也是优于简单工厂的地方.下面看这个模式的类图(截自<java与模式>): 示意性代码: ? 1 2 3 4 5 6 7 package com.javadesignpattern.factorymethod; public interface Creator {          public Product fatcory(); } package com.javadesignpatte

Devexpress报表开发(三):创建主从报表

Devexpress报表开发(三):创建主从报表 此教程是在上一篇的基础上教会大家如何使用Devexpress报表控件来创建主从报表的,我们将从以下几步来实现主从报表: 添加从报表数据 创建从报表 设计从报表布局 显示预览结果 1.添加从报表数据 我们打开上一篇文章的工程,然后右击Report Explorer中的sqlDataSource1,选择Manage Queries(查询管理),然后点击添加. 然后我们按照上一篇文章的步骤添加一张与之关联的表,用作从报表数据. 然后我们在右击sqlDa

Fiddler (三) Composer创建和发送HTTP Request

Fiddler (三) Composer创建和发送HTTP Request 之前已经写过两篇Fiddler的文章了,分别是[Fiddler教程] [Fiddler script用法].  我准备把Fiddler写成一个系列. Fiddler的功能还有很多, 很多功能都没有被挖掘出来.这次我们介绍Fiddler中的一个非常有用的功能Composer,是用来创建和发送HTTP Request的.Composer的使用方法很简单,看下就知道用了. 阅读目录 Fiddler Composer介绍 Fid

Robot Framework--02 菜单栏&amp;工具栏

转自:http://blog.csdn.net/tulituqi/article/details/7584795 我把RIDE的界面大致分了四个区域:菜单栏.工具栏.案例及资源区.工作区,如下图 菜单栏:RIDE所有的功能都在这里面: 工具栏:比较常用的功能,可以快捷操作: 案例及资源区:这里将会是一个目录一样的树形结构(当前目前是刚打开的样子,里面只有一个空的external resources) 工作区:这里是我们主要编辑案例,运行案例的操作区. 其实我一直在想,这个工具怎么讲大家更容易理解