pyqt5的QListWidget中设置右键菜单
QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的,
从文档上可以找到 QWidget 上有以下两个与右键菜单有关的函数:
- Qt.ContextMenuPolicy contextMenuPolicy (self)
- setContextMenuPolicy (self, Qt.ContextMenuPolicy policy)
Qt.ContextMenuPolicy 是一个枚举类型:
| Constant | Value | Description |
|---|---|---|
| Qt.NoContextMenu | 0 | the widget does not feature a context menu, context menu handling is deferred to the widget's parent. |
| Qt.PreventContextMenu | 4 | the widget does not feature a context menu, and in contrast to NoContextMenu, the handling is not deferred to the widget's parent. This means that all right mouse button events are guaranteed to be delivered to the widget itself through mousePressEvent(), and mouseReleaseEvent(). |
| Qt.DefaultContextMenu | 1 | the widget's QWidget.contextMenuEvent() handler is called. |
| Qt.ActionsContextMenu | 2 | the widget displays its QWidget.actions() as context menu. |
| Qt.CustomContextMenu | 3 | the widget emits the QWidget.customContextMenuRequested() signal. |
现在主要要说的是利用 Qt.CustomContextMenu 来创建右键菜单.
listWidget.setContextMenuPolicy(3) 设置菜单
listWidget.customContextMenuRequested[QtCore.QPoint].connect() 绑定方法
通过上面的Qpoint 获取列表中的 选定的选项 item :
item = listWidget.itemAt(x,y)
根据point的坐标移除 列表选项中的item :
listwidget.removeItemWidget(listwidget.takeItem(listwidget.row(item)))
QWidget 和它的子类 contextMenuPolicy 的默认值是 Qt.DefaultContextMenu 的,
所以我们需要通过 setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 重新来设置他的值
(在Qt设计师中, 可以直接修改 contextMenuPolicy 的值为 CustomContextMenu 并且写入到UI文件中,
所以用Qt设计师可以不用 setContextMenuPolicy 方法来设置)
CustomContextMenu 它所发出的是一个 customContextMenuRequested 信号 (signal) 如下:
- void customContextMenuRequested (const QPoint&)
这个信号是QWidget唯一与右键菜单有关的信号(也是自有的唯一信号), 同时也是很容易被忽略的信号(signal)
*注: 文档中QWidget方法和属性巨量多, 以致我都看不到底部居然还有"一个"信号
既然有信号, 那么我们就可以轻松自定义我们想要的右键菜单了.
了解到这些之后, 我们就着手编写槽(slot)了.

def myListWidgetContext(self, point):
popMenu = QtGui.QMenu()
popMenu.addAction(QtGui.QAction(u'添加', self))
popMenu.addAction(QtGui.QAction(u'删除', self))
popMenu.addAction(QtGui.QAction(u'修改', self)) popMenu.exec_(QtGui.QCursor.pos())

接着就是连接槽
self.myListWidget.customContextMenuRequested[QtCore.QPoint].connect(self.myListWidgetContext)
pyqt5的QListWidget中设置右键菜单的更多相关文章
- Pyqt在QListWidget中添加右键菜单
Pyqt 的资料奇少, 攻破难点之后, 就在这里记一下笔记. QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上 ...
- BHO多线程中实现右键菜单
在BHO中实现右键菜单网上相关文章很多,可以通过实现IDocHostUIHandler接口的ShowContextMenu.截获HTMLDocumentEvents2的OnContextMenu消息等 ...
- WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法
原文:WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法 问题描述 今天发现如果我想在一个TextBlock弄一个右键菜单,并且使用Command绑定,结果发 ...
- wpf datagrid设置右键菜单打开时选中项的背景色
原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/artic ...
- 仅在TabControl中的Tab中添加右键菜单
若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...
- IntelliJ IDEA 中设置左菜单字体, 编辑器字体和控制台的字体
IntelliJ IDEA 中设置左菜单字体大小 File-Settings,然后选择appearance,下图右侧红色边框中的内容即设置菜单的字体和大小 IntelliJ IDEA 中设置当前编 ...
- 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序
有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...
- Maven问题总结:Eclipse中项目右键菜单中点击Maven->Update Projects时JDK被重置
Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5 如果没有在Maven中配置过JDK版本,只是在Eclipse中项目的Prope ...
- DevExpress GridView加入DevExpress中的右键菜单PopuMenu
1. 添加一个Barmanager控件 2. 加入popumenu控件,点击该控件右上角的黑色三角号,编辑选项,点击编辑的选项,选择事件,编辑事件. 3. 在使用该右键菜单的控件添加MouseUp事件 ...
随机推荐
- 2.LVS的三种工作模式_NAT模式
1.LVS的三种工作模式 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1. ...
- 第七章 路由 76 路由传参-使用params方式传递路由参数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- SpringCloud之网关 Gateway(五)
前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix ...
- 医院设置x
医院设置x 题目描述 Description 设有一棵二叉树,如下图 其中,圈中数字表示结点居民的人口.圈边上数字表示结点编号,.现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小, ...
- pyTerra
https://pypi.org/project/pyTerra/ pyTerra is a Python module that allows you to make requests to Mic ...
- codeforces1C
Ancient Berland Circus CodeForces - 1C 如今,Berland 的所有马戏表演都有一个圆形的竞技场,其直径为 13 米,但过去的情况有所不同. 在古代 Berlan ...
- Java集合框架之接口Collection源码分析
本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...
- centos6升级系统内核
1.升级系统内核查看内核版本: uname -r 2.6.32-573.8.1.el6.x86_64 导入elrepo的key: rpm --import https://www.elrepo.org ...
- 开源!js实现微信/QQ直接跳转到支付宝APP打开口令领红包!附:demo
最近支付宝的领红包可真是刷爆了各个微信群啊,满群都是支付宝口令. 可是这样推广可不是办法,又要复制又要打开支付宝又要点领取,太麻烦了. 于是乎,提出了一个疑问!是否可以在微信里面点一个链接然后直接打开 ...
- flask第二篇 三剑客+特殊返回值
1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返回字符串 2.Flask中的Redirect 每当访问"/redi" ...