python - 是否可以在 QWebView 上人为触发 mousePressEvent?

标签 python pyqt pyqt4

Due to an astronomically atrocious bug on PyQt4 ,我需要在 QWebView 上人为地触发 mousePressEvent 作为最后的希望。由于某些不明原因,QWebView 的 linkClickedurlChanged当单击的链接涉及 Javascript 时,信号不会传递 QUrl(例如,它不适用于 Youtube 视频)当用鼠标左键单击链接时。使用中键和右键单击链接时,可以完美访问 QUrl。

class CQWebView(QtWebKit.QWebView): 

    def mousePressEvent(self, event):
        if type(event) == QtGui.QMouseEvent:
            if event.button() == QtCore.Qt.LeftButton:
                # FIRE A QtCore.Qt.MiddleButton EVENT HERE,
                # SO THAT I CAN GET THE BLOODY LINK AFTERWARDS.
            elif event.button() == QtCore.Qt.MiddleButton:
                self.emit(QtCore.SIGNAL("OPEN_IN_NEW_TAB")) # Example
            elif event.button() == QtCore.Qt.RightButton:
                self.emit(QtCore.SIGNAL("XXX")) # Example

所以,我硬是想“人为点击”,点击不点击,只触发链接中右按钮点击事件,这样我就可以正确捕捉到QUrl。

最佳答案

您也可以使用 QtTest 模块来完成。在您的 Web View 上设置事件过滤器并检查鼠标左键单击事件并发送鼠标中键单击

def __init__(...)
    self.ui_web_view.installEventFilter(self)

def eventFilter(self, obj, event):
    if obj == self.ui_web_view:
        if event.type() == QtCore.QEvent.MouseButtonPress:
            if event.button() == QtCore.Qt.LeftButton:
                print 'Handled'
                QtTest.QTest.mouseClick(self.ui_web_view, QtCore.Qt.MiddleButton, QtCore.Qt.NoModifier, event.pos())
                return True
    return False

关于python - 是否可以在 QWebView 上人为触发 mousePressEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37428500/

相关文章:

python3正则表达式寻找1个或多个字符串

python - 按下按钮时调用函数-pyqt

python - (PyQt) 为什么我不能更改我的 QTextEdit 小部件的字体?

python - PyQt:具有撤消和重做操作的 QTableWidget

python - 如何在我的 Google App Engine 项目中使用 Django 1.2 模板?

python - 将 Pandas 时区感知 DateTimeIndex 转换为天真的时间戳,但在特定时区

python - 计算列表中有多少个值满足特定条件

python - PyQt QPushButton 信号处理

macos - QT5.5 'failed to load platform plugin " cocoa ”' - MacOS 10.9

python - 有没有办法将按键重新分配给 Qt 中的不同功能?