【转载】Pyqt 添加右键菜单方法
方法 添加 转载 菜单 Pyqt 右键
2023-09-11 14:17:02 时间
转载地址: http://www.cnblogs.com/yogalau/p/3954042.html?utm_source=tuicool
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 来创建右键菜单.
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)了.
1 def myListWidgetContext(self, point): 2 popMenu = QtGui.QMenu() 3 popMenu.addAction(QtGui.QAction(u'添加', self)) 4 popMenu.addAction(QtGui.QAction(u'删除', self)) 5 popMenu.addAction(QtGui.QAction(u'修改', self)) 6 7 popMenu.exec_(QtGui.QCursor.pos())
接着就是连接槽:
1 self.connect(self.UI.BtnOpen, QtCore.SIGNAL('customContextMenuRequested (const QPoint&)'), self.openright)
效果:
相关文章
- 软件测试之发现问题的方法
- JavaFx出现错误Caused by: java.lang.NullPointerException: Location is required的解决方法
- Origin 三种方法在图片中添加水平辅助线
- 添加dubbo.xsd的方法
- 自学编程,毕业月薪1.8万,方法分享
- CSS - transition 过渡属性及使用方法(示例代码)
- 在Linux下打包tar文件时添加密码的方法
- Xamarin XAML语言教程通过ProgressTo方法对进度条设置
- SQL-重复记录查询的几种方法
- 从零开始学android开发-View的setOnClickListener的添加方法
- python中往json中添加文件的方法
- dpkg: 处理软件包 qjackctl (--configure)时出错解决方法
- 添加Godaddy二级域名子域名方法
- iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相...
- Python实现比REST快10倍的用构建API的方法
- VMware 虚拟机中添加新硬盘的方法(转载)
- C#学习之添加命名空间方法
- C#学习之添加MQTT包的方法
- jquery 动态添加,降低input表单的方法
- 设计模式—工厂方法
- Dubbo_异常_Service启动时默认将方法注册到内网IP
- Unity UGUI导入/添加图片资源的方法