在 QWebView 中处理 QTabletEvents
Handle QTabletEvents inside QWebView
我正在尝试在 QWebView 中处理 QTabletEvents。棘手的部分是我需要在 JavaScript:
中处理这些事件
canvas.on("mousemove", function () {
// check if pen was used using PyQt!
}
以及在 PyQt 中检测事件是否由笔(而不是鼠标)触发:
def tabletEvent(self, event):
if event.type() == QEvent.TabletMove:
event.accept()
print("Pen used!")
// get this info back to javascript
是否有可能以某种方式让两者一起工作?
我终于这样解决了我的问题:
import sys
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKitWidgets import QWebView
html = """
<html>
<body>
<h1><button onmousedown="foo()">Push me!</button></h1>
</body>
<script>
function foo() {
if(penDetector.isPenUsed()){
alert("Booya!");
}
}
</script>
</html>
"""
class TestView(QWebView):
class PenDetector(QObject):
def __init__(self, parent=None):
super().__init__(parent)
self.penUsed = False
@pyqtSlot(result=bool)
def isPenUsed(self):
return self.penUsed
def __init__(self, parent=None):
super().__init__(parent)
self.penDetector = self.PenDetector()
self.page().mainFrame().addToJavaScriptWindowObject("penDetector", self.penDetector)
def mousePressEvent(self, event):
self.penDetector.penUsed = False
super().mousePressEvent(event)
def tabletEvent(self, event):
self.penDetector.penUsed = True
super().mousePressEvent(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
view = TestView()
frame = view.page().mainFrame()
view.setHtml(html)
view.show()
app.exec_()
我正在尝试在 QWebView 中处理 QTabletEvents。棘手的部分是我需要在 JavaScript:
中处理这些事件canvas.on("mousemove", function () {
// check if pen was used using PyQt!
}
以及在 PyQt 中检测事件是否由笔(而不是鼠标)触发:
def tabletEvent(self, event):
if event.type() == QEvent.TabletMove:
event.accept()
print("Pen used!")
// get this info back to javascript
是否有可能以某种方式让两者一起工作?
我终于这样解决了我的问题:
import sys
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKitWidgets import QWebView
html = """
<html>
<body>
<h1><button onmousedown="foo()">Push me!</button></h1>
</body>
<script>
function foo() {
if(penDetector.isPenUsed()){
alert("Booya!");
}
}
</script>
</html>
"""
class TestView(QWebView):
class PenDetector(QObject):
def __init__(self, parent=None):
super().__init__(parent)
self.penUsed = False
@pyqtSlot(result=bool)
def isPenUsed(self):
return self.penUsed
def __init__(self, parent=None):
super().__init__(parent)
self.penDetector = self.PenDetector()
self.page().mainFrame().addToJavaScriptWindowObject("penDetector", self.penDetector)
def mousePressEvent(self, event):
self.penDetector.penUsed = False
super().mousePressEvent(event)
def tabletEvent(self, event):
self.penDetector.penUsed = True
super().mousePressEvent(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
view = TestView()
frame = view.page().mainFrame()
view.setHtml(html)
view.show()
app.exec_()