QT学习笔记:菜单栏与工具栏
QT学习之菜单栏与工具栏
目录
1 2 3 4 | 简单菜单栏 多级菜单栏 上下菜单栏 工具栏 |
简单菜单栏
程序示例
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 | from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp 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) menubar = self .menuBar() fileMenu = menubar.addMenu( '文件(&F)' ) fileMenu.addAction(exitAct) self .show() if __name__ = = '__main__' : app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
代码解析
设置静态状态栏信息
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?