1. PyQt5简介
PyQt5是一个Python GUI框架,它是基于Qt库开发的。Qt是一个跨平台的C++应用开发框架,它提供了GUI开发所需的一切,例如窗口管理、事件处理等。而PyQt5则可以将Qt库中的所有功能封装到Python的模块中,使得Python程序员可以使用PyQt5开发GUI应用程序。
PyQt5是Python中最流行的GUI框架之一,它的开发效率高而且代码易于维护。PyQt5支持多种操作系统和平台,包括Windows、Linux和MacOS。
2. 菜单栏控件QMenuBar
菜单栏控件QMenuBar是PyQt5中经常使用的用户界面控件之一。菜单栏可以让用户通过单击菜单项来执行特定的操作,这些操作可以是打开文件、保存文件、编辑文本等等。
要创建一个菜单栏,需要使用QMenuBar类。下面是一个简单的例子,其中我们创建了一个QMainWindow窗口,并在其中添加了一个名为“File”的菜单项:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QAction
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
menubar = self.menuBar()
file_menu = menubar.addMenu('File')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
运行上述代码,我们可以看到出现了一个空白的窗口,并且在窗口的顶部出现了一个名为“File”的菜单项。
2.1 添加菜单项
为菜单栏添加菜单项可以通过使用QAction类实现。QAction类可以将一个操作绑定到一个特定的信号上,当这个信号激发时,操作就会被执行。
下面是一个简单的例子,其中我们创建了一个SaveAction类,将其添加到名为“File”的菜单项中:
class SaveAction(QAction):
def __init__(self):
super().__init__('Save', None)
self.triggered.connect(self.save)
def save(self):
print('Save action triggered.')
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
menubar = self.menuBar()
file_menu = menubar.addMenu('File')
save_action = SaveAction()
file_menu.addAction(save_action)
上述代码中,我们创建了一个名为SaveAction的类,它继承自QAction类。SaveAction类有一个save()方法,当该操作被激发时,save()方法就会被执行。我们还在MyWindow类的构造函数中创建了一个File菜单,并在其中添加了一个名为“Save”的操作。
运行上述代码,我们可以看到在名为“File”的菜单项下出现了一个“Save”的子项,当我们单击该子项时,终端上会输出“Save action triggered.”这句话。
2.2 添加子菜单
有时候,我们可能需要为某个菜单项添加子菜单,以便更好地组织菜单项。要添加子菜单,可以使用QMenu类。
下面是一个简单的例子,其中我们创建了一个名为“Edit”的菜单项,并为该菜单项添加了两个子菜单项:“Cut”和“Copy”:
class CutAction(QAction):
def __init__(self):
super().__init__('Cut', None)
self.triggered.connect(self.cut)
def cut(self):
print('Cut action triggered.')
class CopyAction(QAction):
def __init__(self):
super().__init__('Copy', None)
self.triggered.connect(self.copy)
def copy(self):
print('Copy action triggered.')
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
menubar = self.menuBar()
edit_menu = menubar.addMenu('Edit')
cut_action = CutAction()
copy_action = CopyAction()
edit_submenu = QMenu('Paste', self)
edit_submenu.addAction(cut_action)
edit_submenu.addAction(copy_action)
edit_menu.addMenu(edit_submenu)
上述代码中,我们创建了名为CutAction和CopyAction的两个操作,它们继承自QAction类,并分别实现了cut()和copy()方法。我们还在MyWindow类的构造函数中创建了一个名为“Edit”的菜单项,并为该菜单项添加了一个编辑子菜单,该编辑子菜单中包含了一个“Cut”和一个“Copy”操作。
运行上述代码,我们可以看到在名为“Edit”的菜单项下出现了一个“Paste”的子项,当我们在该子项上单击时,会出现“Cut”和“Copy”两个子菜单项,并且当我们单击这些子菜单项时,终端窗口会输出相应的消息。
2.3 添加快捷键和状态栏提示
在添加菜单项的时候,我们还可以为菜单项绑定快捷键和状态栏提示。快捷键可以让用户通过键盘操作来执行菜单项,而状态栏提示可以提供有关该操作的额外信息。
下面是一个简单的例子,其中我们为名为“Save”的操作添加了一个快捷键和一个状态栏提示:
class SaveAction(QAction):
def __init__(self):
super().__init__('Save', None)
self.setShortcut('Ctrl+S')
self.setStatusTip('Save the file')
self.triggered.connect(self.save)
def save(self):
print('Save action triggered.')
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
menubar = self.menuBar()
file_menu = menubar.addMenu('File')
save_action = SaveAction()
file_menu.addAction(save_action)
上述代码中,我们在SaveAction类的构造函数中使用了setShortcut()方法和setStatusTip()方法来添加了一个名为“Ctrl+S”的快捷键和一个状态栏提示。“Ctrl+S”快捷键可以让用户通过键盘操作来执行该操作,并且状态栏提示可以为用户提供该操作的更多信息。
运行上述代码,我们可以看到在名为“File”的菜单项下出现了一个名为“Save”的子项,右边还有一个“Ctrl+S”的快捷键和一个状态栏提示信息。
2.4 菜单项和工具栏的关联
最后,我们还可以将菜单项与工具栏关联起来,这样可以让用户更方便地执行某些操作。
下面是一个简单的例子,其中我们创建了一个名为“Save”的操作,将其添加到了名为“File”的菜单项和名为“Save”的工具栏中:
class SaveAction(QAction):
def __init__(self):
super().__init__('Save', None)
self.setShortcut('Ctrl+S')
self.setStatusTip('Save the file')
self.triggered.connect(self.save)
def save(self):
print('Save action triggered.')
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
menubar = self.menuBar()
file_menu = menubar.addMenu('File')
save_action = SaveAction()
file_menu.addAction(save_action)
toolbar = self.addToolBar('Save')
toolbar.addAction(save_action)
上述代码中,我们创建了一个名为SaveAction的操作,并将其添加到名为“File”的菜单项中。我们还创建了一个名为“Save”的工具栏,并在其中添加了该操作。
运行上述代码,我们可以看到在名为“File”的菜单项下出现了一个名为“Save”的子项,同时在窗口的顶部还出现了一个名为“Save”的工具栏,单击该工具栏上的“Save”按钮,就会触发SaveAction中的save()方法。
3. 总结
本文介绍了PyQt5中菜单栏控件QMenuBar的使用方法,我们学习了如何添加菜单项、添加子菜单、添加快捷键和状态栏提示以及将菜单项与工具栏关联起来。与其他GUI框架相比,PyQt5具有简单易用、开发效率高的优点,是Python中最流行的GUI框架之一。