python GUI库图形界面开发之PyQt5菜单栏控件QMenuBa

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框架之一。

后端开发标签