python - 使用 python pyqt5 创建单击上下文菜单的事件
问题描述
正在使用PyQt5
,并且我有一个窗口应用程序,我已经有一些函数和类,并且我实现了当用户单击鼠标右键单击它时会显示一个上下文菜单。
我需要的是:我想对代码进行单元测试,所以我想测试将打开上下文菜单的右键单击,然后我必须测试用户是否单击它,它应该执行诸如删除点。
但是我的问题是我无法制作一个将单击该上下文菜单并采取行动的事件,因为我认为它不在小部件中,所以我无法在上下文菜单所在的点上进行事件单击在,我试过了,但它不起作用。
所以有什么想法,如何让事件点击或传递,或者任何刚刚采取的行动并在上下文菜单打开后运行代码?
注意:我正在使用 QEvent 进行测试,因为我正在使用 QWidget 和 QApllication PyQt5 python 3.7。
这是打开上下文菜单的测试事件:
point = QPointF(30, 30) #For example this will open the context menu at that point
e = QMouseEvent(QMouseEvent.MouseButtonPress, point, Qt.RightButton, Qt.NoButton, Qt.NoModifier) #Right Click
self.canvas.contextMenuEvent(e)
这是来自画布类:
def contextMenuEvent(self, ev):
"""
overrides the original contextMenuEvent function
:param ev: <QEvent>
:return: None
"""
self.current_tool.context_menu(ev)
这是来自当前的工具功能:
def context_menu(self, e):
menu = QMenu(self.canvas)
delete_whole_polygon_act = menu.addAction("Delete Area?")
action = menu.exec_(self.canvas.mapToGlobal(e.pos()))
if action == delete_whole_polygon_act:
self.delete_polygon(e.pos())
解决方案
推荐阅读
- php - 关于 API 和 Postman 和/或无论如何检索数据和填充参数的问题
- python - 使用 asyncio 时如何访问 dict 键?
- python-3.x - 通过 Python 中的 Databricks api 读取 Databricks 表?
- python - 如何确定熊猫数据框中的值是否也存在于前一个日期?
- .net-4.0 - Windows 模拟 - 负载均衡器
- powershell - 如何使用 Powershell 在 AD 中提取管理器的多个属性?
- file - 在 Ansible 中打印时保留文件的格式
- node.js - Google Code Jam:我对火车时刻表问题的解决方案失败了
- swiftui - SwiftUI TabView 索引视图不尊重页面视图索引
- mongodb - 使用来自 mongodb 触发器的 cloudwatch 事件触发 aws lambda 函数比使用 sqs 中的消息有多可靠?