QT学习笔记:菜单栏与工具栏

QT学习之菜单栏与工具栏

 

目录

1
2
3
4
简单菜单栏
多级菜单栏
上下菜单栏
工具栏

简单菜单栏

程序示例

代码解析

设置静态状态栏信息
self.statusBar().showMessage('准备就绪')

QAction是使用菜单栏,工具栏或自定义键盘快捷方式执行操作的抽象。我们创建一个具有特定图标和“退出”标签的动作。
exitAct = QAction(QIcon('exit.png'), '退出(&E)', self)

为此操作定义了快捷方式
exitAct.setShortcut('Ctrl+Q')

当我们将鼠标指针悬停在菜单项上时,“退出程序”会显示在状态栏中。
exitAct.setStatusTip('退出程序')

当我们选择这个特定的动作时,发出触发信号。 信号连接到QApplication小部件的quit()方法。 这终止了应用程序。
exitAct.triggered.connect(qApp.quit)

  • menuBar()方法创建一个菜单栏。
  • addMenu()创建文件菜单,
  • addAction()添加操作
menubar = self.menuBar()
fileMenu = menubar.addMenu('文件(&F)')
fileMenu.addAction(exitAct)

上面的代码中我们在退出、文件后面都增加了“&”这个符号,增加这个符号后,当我们按住“Alt+F”的时候就能快速打开文件这个菜单,同理按住“Alt+E”的时候就能退出了。

演示结果

 

多级菜单栏

 程序示例

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
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()
    def InitUI(self):
        self.statusBar().showMessage('准备就绪')
 
        self.setGeometry(300,300,400,300)
        self.setWindowTitle('多级菜单')
 
 
        exitAct = QAction(QIcon('exit.png'), '退出(&E)', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('退出程序')
        exitAct.triggered.connect(qApp.quit)
 
 
 
        saveMenu = QMenu('保存方式(&S)', self)
        saveAct = QAction(QIcon('save.png'),'保存...', self)
        saveAct.setShortcut('Ctrl+S')
        saveAct.setStatusTip('保存文件')
 
        saveasAct = QAction(QIcon('saveas.png'),'另存为...(&O)', self)
        saveasAct.setStatusTip('文件另存为')
 
        saveMenu.addAction(saveAct)
        saveMenu.addAction(saveasAct)
 
 
        newAct = QAction(QIcon('new.png'),'新建(&N)',self)
        newAct.setShortcut('Ctrl+N')
 
 
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('文件(&F)')
        fileMenu.addAction(newAct)
        fileMenu.addMenu(saveMenu)
        fileMenu.addSeparator()
        fileMenu.addAction(exitAct)
 
        self.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

 代码解析

创建退出菜单
exitAct = QAction(QIcon('exit.png'), '退出(&E)', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('退出程序')
exitAct.triggered.connect(qApp.quit)

使用QMenu创建新菜单“保存方式”
saveMenu = QMenu('保存方式(&S)', self)

创建“保存”
saveAct = QAction(QIcon('save.png'),'保存...', self)
saveAct.setShortcut('Ctrl+S')
saveAct.setStatusTip('保存文件')

创建“另存为”
saveasAct = QAction(QIcon('saveas.png'),'另存为...(&O)', self)
saveasAct.setStatusTip('文件另存为')

将“保存”和“另存为”添加到“保存方式”
saveMenu.addAction(saveAct)
saveMenu.addAction(saveasAct)

创建“新建”
newAct = QAction(QIcon('new.png'),'新建(&N)',self)
newAct.setShortcut('Ctrl+N')

创建菜单栏,并添加主菜单“文件”(一级菜单)
menubar = self.menuBar()
fileMenu = menubar.addMenu('文件(&F)')

添加“新建”、“保存方式”、“退出”三个二级菜单
addSeparator():在菜单中添加横线分隔符号
fileMenu.addAction(newAct)
fileMenu.addMenu(saveMenu)
fileMenu.addSeparator()
fileMenu.addAction(exitAct)

 

上下菜单栏

程序示例

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
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys
 
 
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()
 
    def InitUI(self):
        self.statusBar().showMessage('准备就绪')
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle('上下文菜单')
        self.show()
 
    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)
    ex = Example()
    sys.exit(app.exec_())

代码解析

1
2
3
4
5
6
7
8
9
<strong>使用上下文菜单,我们必须重新实现contextMenuEvent()方法。
使用exec_()方法显示上下文菜单
mapToGlobal()方法将窗口小部件坐标转换为全局屏幕坐标。</strong>
action = cmenu.exec_(self.mapToGlobal(event.pos()))
 
<strong>如果从上下文菜单返回的操作等于退出操作,我们终止应用程序。</strong>
<strong>这里我们没有对“新建”与“退出”进行操作</strong>
if action == quitAct:
    qApp.quit()

  

工具栏

程序示例

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
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
from PyQt5.QtGui import QIcon
import sys
 
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.InitUI()
    def InitUI(self):
        self.statusBar().showMessage('准备就绪')
 
        self.setGeometry(300,300,400,300)
        self.setWindowTitle('工具栏')
 
        exitAct = QAction(QIcon('exit.png'), '退出(&E)', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('退出程序')
        exitAct.triggered.connect(qApp.quit)
 
        saveMenu = QMenu('保存方式(&S)', self)
        saveAct = QAction(QIcon('save.png'),'保存...', self)
        saveAct.setShortcut('Ctrl+S')
        saveAct.setStatusTip('保存文件')
        saveasAct = QAction(QIcon('saveas.png'),'另存为...(&O)', self)
        saveasAct.setStatusTip('文件另存为')
        saveMenu.addAction(saveAct)
        saveMenu.addAction(saveasAct)
 
        newAct = QAction(QIcon('new.png'),'新建(&N)',self)
        newAct.setShortcut('Ctrl+N')
        newAct.setStatusTip('新建文件')
 
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('文件(&F)')
        fileMenu.addAction(newAct)
        fileMenu.addMenu(saveMenu)
        fileMenu.addSeparator()
        fileMenu.addAction(exitAct)
 
        toolbar = self.addToolBar('工具栏')
        toolbar.addAction(newAct)
        toolbar.addAction(exitAct)
 
        self.show()
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

代码解析

工具栏使用addToolBar()方法创建。 我们使用addAction()向工具栏添加两个动作对象。

toolbar = self.addToolBar('工具栏')
toolbar.addAction(newAct)
toolbar.addAction(exitAct)


posted @   -零  阅读(1186)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示