pyqt5-右键菜单

发布时间 2023-04-28 14:27:06作者: 挖洞404

1、介绍

pyqt支持两种类型的菜单,窗口的菜单和右键菜单。这里阐述右键菜单的使用。

2、右键触发

from PyQt5.QtCore import Qt

self.ui.plainTextEdit: QPlainTextEdit
self.ui.plainTextEdit.setContextMenuPolicy(Qt.CustomContextMenu)
self.ui.plainTextEdit.customContextMenuRequested.connect(self.plainTextEdit_rightmenu)

def print(self, pos):
    pass
  • 右键触发需要两行代码,不能缺失。注意Qt是从PyQt5.QtCore引入
  • 这行代码的两个方法,都是在QWidget中声明,即几乎所有可见组件都能够使用右键触发
  • 右键触发并不一定要求是做右键菜单,也可以是其它功能的方法
  • 右键触发绑定方法,需要一个参数,用于接收右键点击时鼠标位置

3、右键菜单

def plainTextEdit_rightmenu(self, pos):
    print('右键菜单')
    menu = QMenu(self.plainTextEdit)
    menu.addAction(QAction('动作1', menu))
    menu.addAction(QAction('动作2', menu))
    menu.addAction(QAction('动作3', menu))
    menu.triggered.connect(self.menuSlot)
    # 将菜单显示在鼠标位置
    menu.exec_(QCursor.pos())

def menuSlot(self, act):
    print(act.text()
  • 实际上,菜单的触发也可以是左键点击、双击、鼠标移动、键盘按下等其他事件。只是相对右键菜单更常见和符合交互习惯。
  • triggered事件是鼠标点击菜单的项触发
  • exec_方法中参数可以是基于QCursor.pos直接获取,也可以是右键触发时传递的参数pos。作用是在鼠标位置弹出菜单,甚至可以直接设置菜单的弹出位置