PyQt5菜单之多选功能
有时候会遇到这种需求:在界面某个位置弹出一个菜单,其中里面的菜单项可以多选(类似配置选项),此时用 QMenu 会遇到点击一个菜单项就会自动关闭,当然可以通过其他方式实现该功能,不过这里就采用 QMenu 通过特殊的方式来实现该需求。
# 需求
要实现的效果:
菜单 1
菜单 2
菜单 3
菜单 4
点击菜单 1、2、3 可以多选不关闭菜单
点击菜单 4 可以勾选,并且关闭菜单
# 原理
设置菜单项可勾选:通过 QAction.setCheckable(True) 方法实现
设置菜单不可关闭:通过覆盖 QMenu 的鼠标释放 mouseReleaseEvent 方法(可直接替换或者通过 installEventFilter 安装事件过滤器实现)
在菜单的鼠标释放事件中,当点击菜单项后是通过点击点坐标来查找是否有 QAction ,然后触发对应的 QAction 。
故在没有 QAction 的地方则直接交还给 QMenu 自行处理逻辑,在有 QAction 的地方可以根据自己的需求进行处理(如上所提)
# 代码
#!/usr/bin/env python
# ...