在QWebEngineView中检测鼠标点击

4

如何检测 QWebEngineView 控件的鼠标点击事件?

我尝试了以下代码,但并没有起作用:

class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.view.installEventFilter(self)

    def eventFilter(self, obj, event):
        if event.type() == event.MouseButtonPress:
             print ("Widget click")
        return super(QtWidgets.QMainWindow, self).eventFilter(obj, event)

什么是“view”?除此之外,为什么在事件过滤器中使用super()和QMainWindow参数? - musicamante
视图是一个小部件类型为“QWebEngineView”。我不知道为什么要使用super(),我只是复制了它。对于我的糟糕英语表示抱歉。 - Cliffhanger
我需要返回什么? - Cliffhanger
问题不在于你返回什么,而是super的参数,它应该是当前类:super(MyWin, self),或者在Python 3中,只需使用没有任何参数的super() - musicamante
1个回答

5
假设视图是 QWebEngineView 对象,您想跟踪它的鼠标事件,则应使用 focusProxy,它是一个内部小部件,用于处理这些类型的事件。另一方面,您必须正确应用继承。
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MyWin, self).__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.view.focusProxy().installEventFilter(self)

    def eventFilter(self, obj, event):
        if obj is self.ui.view.focusProxy() and event.type() == event.MouseButtonPress:
            print("Widget click")
        return super(MyWin, self).eventFilter(obj, event)

我遇到了这个错误:AttributeError: 'NoneType'对象没有属性'installEventFilter'。 - Cliffhanger
1
@Cliffhanger 嗯,尝试在self.ui.view.focusProxy().installEventFilter(self)之前添加self.show()self.ui.view.show()。如果不起作用,则需要提供Ui_MainWindow类的代码以分析错误的原因。 - eyllanesc
感谢您的帮助。我在UI_MainWindow类中找到了错误,我没有在self.view中加载页面。在创建了UI_MainWindow类中的QWebEngineWiev之后,我添加了这行代码:self.view.load(url),现在它可以工作了。非常感谢并对我的糟糕英语表示歉意。 - Cliffhanger
我也遇到了错误:AttributeError: 'NoneType' object has no attribute 'installEventFilter'。除了使用focusProxy()之外,这里还有其他的解决方法吗? - iMath
在PyQt6中:event.type() == event.Type.MouseButtonPress - cards
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接