Advertisement

Pyqt5添加右键菜单

阅读量:

众所周知,在React中处理窗口点击事件时,默认情况下按下左键触发的是clicked事件。然而,在处理右键操作时,默认情况下按下右键触发的是customContextMenuRequested事件。

以初始化TreeView为例:

复制代码
    from PyQt5.QtWidgets import QTreeView, QBoxLayout, QMenu
    from PyQt5.QtCore import Qt
    from PyQt5.Qt import QStandardItemModel, QCursor
    
    
    class FolderBar(QWidget):
    
    def __init__(self):
        super().__init__()
        self.setMinimumSize(300, 600)
        layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.tree_view = QTreeView()
        self.tree_view.setModel(QStandardItemModel())
        layout.addWidget(self.tree_view)
        self.setLayout(layout)
        self.tree_view.clicked.connect(...)
        self.tree_view.setContextMenuPolicy(Qt.CustomContextMenu)
        self.tree_view.customContextMenuRequested.connect(...)
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

首先需要配置setContextMenuPolicy为Qt.CustomContextMenu, 这样就可以实现右键事件的响应功能了。
customContextMenuRequested方法会将传入的处理函数与鼠标的点击位置信息进行结合。
例如如何显示菜单:
当customContextMenuRequested方法被调用时, 会将传入的处理函数与鼠标的点击位置信息进行结合。

复制代码
    def show_context_menu(self, pos):
        menu = QMenu(self)
        action = menu.addAction('add folder')
        action.triggered.connect(...)
        action = menu.addAction('rename')
        action.triggered.connect(...)
        action = menu.addAction('delete')
        action.triggered.connect(...)
        menu.exec_(QCursor.pos())
    
    
      
      
      
      
      
      
      
      
      
    
    AI写代码

不执行menu.exec_菜单不会显示的。

全部评论 (0)

还没有任何评论哟~