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

1、介绍

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

2、窗口菜单栏

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

    def __init__(self):
        ...
        self.window: QMainWindow
        menuBar = self.window.menuBar()
        file = QMenu('文件', menuBar)
        file.addAction('新建')
        file.addAction('打开')
        opt = QMenu('操作', menuBar)
        opt.addAction('选择')
        opt.addAction('切换')
        menuBar.addMenu(file)
        menuBar.addMenu(opt)
        menuBar.triggered.connect(self.menuBar_triggered)
    
    def menuBar_triggered(self, act: QAction):
        if act.text() == '':
            pass

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

 

posted @ 2023-10-01 02:52  挖洞404  阅读(242)  评论(0编辑  收藏  举报