Due to an astronomically atrocious bug on PyQt4 ,我需要在 QWebView 上人为地触发 mousePressEvent 作为最后的希望。由于某些不明原因,QWebView 的 linkClicked和 urlChanged当单击的链接涉及 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/