2015-11-11 3 views
0

Я пытаюсь обрабатывать QTabletEvents внутри QWebView. Хитрость в том, что мне нужно обрабатывать эти события в JavaScript:Ручка QTabletEvents внутри QWebView

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 

Можно ли как-то заставить обе работать вместе?

+0

[evaluateJavaScript] (http://doc.qt.io/qt-4.8/qwebframe.html#evaluateJavaScript). – ekhumoro

+0

Спасибо, но как это мне поможет в этом конкретном случае? – sonovice

+0

Когда происходит событие планшета, вызовите функцию javascript. – ekhumoro

ответ

0

я, наконец, решить мою проблему так:

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_() 
Смежные вопросы