下面我将详细讲解 Python 的 “PyQt5 QMenuBar, QMenu & QAction” 组件的完整使用攻略。
概述
在使用 PyQt5 构建图形用户界面(GUI)时,QMenuBar, QMenu 和 QAction 组件是构建菜单和工具栏以及相应组件的基础。
QMenuBar
QMenuBar 是一个水平的菜单栏,通常显示在窗口主窗口最上面。每个菜单是一个下拉菜单,通过点击菜单或按下快捷键打开。
QMenu
QMenu 是由 QMenuBar,QMenu 或者 QAction 触发的弹出菜单。QMenu 可以包含多个 QAction。
QAction
QAction 是一个操作,可以产生动作并绑定到菜单、按钮和工具栏等上。
PyQt5 QMenuBar, QMenu & QAction 的使用方法
创建菜单栏
可以使用 menuBar()
方法创建 QMenuBar
,然后调用 addMenu()
方法添加 QMenu
。
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu('File')
edit_menu = menu_bar.addMenu('Edit')
view_menu = menu_bar.addMenu('View')
创建菜单
要创建 QMenu
,需要使用 QMenu
构造函数。然后,可以随时使用 addMenu()
方法添加子菜单。
file_menu.addMenu('Open')
file_menu.addMenu('Save')
file_menu.addMenu('Exit')
创建 Action
要创建 QAction
,也是使用 QAction
构造函数。之后,可以将它们添加到菜单或者工具栏中。
open_action = QAction('Open', self)
save_action = QAction('Save', self)
exit_action = QAction('Exit', self)
file_menu.addAction(open_action)
file_menu.addAction(save_action)
file_menu.addAction(exit_action)
在这个例子中,QAction
接收一个标签和一个父类对象。使用 addAction()
方法将 Action 添加到菜单中。
示例1
下面的代码演示了如何创建菜单栏、菜单与对应的 actions,并设置快捷键。
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建打开菜单
open_act = QAction('Open', self)
open_act.setShortcut('Ctrl+O')
open_act.triggered.connect(self.open_file)
# 创建保存菜单
save_act = QAction('Save', self)
save_act.setShortcut('Ctrl+S')
save_act.triggered.connect(self.save_file)
# 创建退出菜单
exit_act = QAction('Exit', self)
exit_act.setShortcut('Ctrl+Q')
exit_act.triggered.connect(qApp.quit)
# 创建菜单栏
menubar = self.menuBar()
# 添加文件菜单
file_menu = menubar.addMenu('File')
file_menu.addAction(open_act)
file_menu.addAction(save_act)
file_menu.addSeparator() # 添加分割线
file_menu.addAction(exit_act)
# 添加编辑菜单
edit_menu = menubar.addMenu('Edit')
#设置窗口尺寸和标题
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('MenuBar')
self.show()
def open_file(self):
print('Open file')
def save_file(self):
print('Save file')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
示例2
下面的代码演示了如何创建一个右键菜单。
import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 添加文本编辑部件
text_edit = QTextEdit(self)
self.setCentralWidget(text_edit)
# 创建右键菜单
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu('File')
edit_menu = menu_bar.addMenu('Edit')
view_menu = menu_bar.addMenu('View')
# 增加 Action
copy_act = QAction('Copy', self)
copy_act.setShortcut('Ctrl+C')
copy_act.setStatusTip('Copy text')
edit_menu.addAction(copy_act)
paste_act = QAction('Paste', self)
paste_act.setShortcut('Ctrl+V')
paste_act.setStatusTip('Paste text')
edit_menu.addAction(paste_act)
# 将右键菜单关联到文本编辑器
text_edit.setContextMenuPolicy(Qt.CustomContextMenu)
text_edit.customContextMenuRequested.connect(self.right_click_menu)
#设置窗口尺寸和标题
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('ContextMenu')
self.show()
def right_click_menu(self, pos):
context_menu = QMenu(self)
copy = QAction('Copy', self)
paste = QAction('Paste', self)
context_menu.addAction(copy)
context_menu.addAction(paste)
context_menu.exec_(self.mapToGlobal(pos))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
这个例子仅仅是一个基础用法,在 PyQt5 中 QMenuBar, QMenu & QAction 组件的用法还有更多,需要大家不断学习和探索。