欢迎访问宙启技术站
智能推送

python PyQt如何创建上下文菜单

发布时间:2023-05-15 17:18:08

在 Python 中,PyQt 是一个流行的桌面应用程序开发框架,它提供了强大的工具和组件来开发跨平台的 GUI 应用程序。PyQt 中的 QMenu 组件提供了上下文菜单的支持,允许用户通过右键单击程序界面中的组件来打开自定义的菜单,以执行所需的操作。在这篇文章中,我们将讨论如何使用 PyQt 创建上下文菜单。

首先,我们需要创建一个 QMainWindow 类型的主窗口并将其显示出来。然后,我们可以创建一个 QMenu 组件,并将其添加到主窗口中。这个 QMenu 组件将是我们要添加到程序界面的上下文菜单。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(50, 50, 600, 400)
        self.setWindowTitle("Context Menu")

        self.show()

        self.createContextMenu()

    def createContextMenu(self):
        contextMenu = QMenu()
        contextMenu.addAction("Action 1")
        contextMenu.addAction("Action 2")
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.showContextMenu)

    def showContextMenu(self, pos):
        print("Context menu requested")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MyMainWindow()
    sys.exit(app.exec_())

在上面的代码中,我们创建了一个名为 MyMainWindow 的类,继承了 QMainWindow。在 __init__ 方法中,我们调用 initUI 方法来设置窗口的属性和显示它。在 initUI 方法中,我们也调用 createContextMenu 方法来创建上下文菜单。

在 createContextMenu 方法中,我们创建了一个 QMenu 组件,并添加两个 QAction 组件来模拟两个菜单项。我们还设置了上下文菜单策略为 Qt.CustomContextMenu,以指示程序使用我们自己创建的菜单而不是默认菜单。最后,我们用 customContextMenuRequested 信号连接到 showContextMenu 方法来显示自定义菜单。

用 run 方法将代码运行起来,右键点击主窗口便可以看到自定义上下文菜单。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MyMainWindow()
    sys.exit(app.exec_())

现在,我们已经创建了一个工作的上下文菜单。但是,目前添加的 QAction 组件没有任何作用。我们需要修改 showContextMenu 方法,以监听 QAction 组件的触发并执行所需的操作。

def showContextMenu(self, pos):
        contextMenu = QMenu(self)

        action1 = contextMenu.addAction("Action 1")
        action2 = contextMenu.addAction("Action 2")

        action = contextMenu.exec_(self.mapToGlobal(pos))

        if action == action1:
            print("Action 1 selected!")
        elif action == action2:
            print("Action 2 selected!")

在上面的代码中,我们首先创建了一个 QMenu 组件,并添加了两个 QAction 组件,与之前相同。我们还使用 mapToGlobal 方法将本地坐标转换为全局坐标,并将其作为参数传递给 exec_ 方法来显示菜单。

在 exec_ 方法返回后,我们检查哪个 QAction 组件被触发,并采取适当的操作。在上面的示例中,我们只是显示了一条消息。您可以根据需要修改并添加操作。

这就是创建 PyQt 上下文菜单的基本过程。请记住,这只是一个示例,您可以根据需要修改并添加组件。现在您可以继续学习 PyQt,探索更多强大的工具和组件。