首页 > 解决方案 > 使用 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())

标签: pythontestingpyqt5qwidgetqevent

解决方案


推荐阅读