在QWebView中处理QTablet事件

Handle QTabletEvents inside QWebView

本文关键字:QTablet 事件 处理 QWebView      更新时间:2023-09-26

我正试图在QWebView中处理QTabletEvent。棘手的部分是,我需要在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_()