pyqt5-窗口菜单栏和右键菜单

发布时间 2023-10-01 02:56:04作者: 挖洞404

1、介绍

窗口菜单栏和右键菜单的实现过程中,存在很大程度的相似性,都会使用QMenu和QAction这两类对象。

2、窗口菜单栏

只有QMainWindow类的窗口才可以创建窗口菜单栏,而QWidget和其它窗口则不支持。

3、右键菜单

基本上所有组件都支持右键菜单的实现。

from PyQt5.QtCore import Qt

    def __init(self):
        ...
        # 右键菜单
        self.window.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.window.treeWidget.customContextMenuRequested.connect(self.treeWidget_rightMenu)

    def treeWidget_rightMenu(self, pos):
        menu = QMenu(self.window.plainTextEdit)
        menu.addAction('新建连接')
        menu.triggered.connect(self.treeWidget_rightMenu_triggered)
        menu.exec_(QCursor.pos())

    def treeWidget_rightMenu_triggered(self, act: QAction):
        if act.text() == '新建连接':
            pass
  • 注意Qt类的准确引入
  • 实际上,右键菜单中由右键触发只是习惯而言,也可以基于单击左键或其它事件等形式触发菜单
from PyQt5.QtCore import Qt

    def __init(self):
        ...
        # 点击按钮,生成菜单
        self.window.pushButton.clicked.connect(self.treeWidget_rightMenu)

    def treeWidget_rightMenu(self, pos=None):
        menu = QMenu(self.window)
        menu.addAction('新建连接')
        menu.triggered.connect(self.treeWidget_rightMenu_triggered)
        menu.exec_(QCursor.pos())

    def treeWidget_rightMenu_triggered(self, act: QAction):
        if act.text() == '新建连接':
            pass