2016-11-26 2 views

Antwort

2

Ich erstellte eine Brücke QObject, Der Fehler, den ich bei der Implementierung dieser Klasse lief, war, dass ich vergaß, @QtCore.pyqtSlot Dekorateur hinzuzufügen, und es war wichtig.

class Bridge(QtCore.QObject): 
    @QtCore.pyqtSlot() 
    def some_slot(): 
     print("Slot Invoked") 

Hier habe ich ein QWebEngineView und ein QWebChannel und stellen Sie den Web-Kanal der QWebEnginePage diesen Kanal und umgekehrt zu sein.

Dann habe ich meine Brücke QObject self.helper_bridge ich zunächst gar nicht self verwenden und verwendet nur helper_bridge durch seine eigene, und natürlich das machte meine app Absturz

class MainWidget(object): 
    def __init__(self): 
     ... 
     self.webView = QtWebEngineWidgets.QWebEngineView(parent) 

     channel = QtWebChannel.QWebChannel(self.webView.page()) 
     self.webView.page().setWebChannel(channel) 

     self.helper_bridge = Bridge() 
     channel.registerObject("helperBridge", self.helper_bridge) 

     url = QtCore.QUrl("file:///path/to/index.html") 
     self.webView().page().load(url) 
     ... 

Endlich die index.html Seite,

Beachten Sie das zweite Skript, das von Qt zur Verfügung gestellt wird.

Hier habe ich eine Instanz von QWebChannel bei meinem Transport erstellt: qt.webChannelTransport, und innerhalb des Callbacks behandelt ich die Klickereignisbindung, wie Sie sehen können.

<html>                   
    <head>                   
    </head>                  
    <body>                   
     <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js'</script> 
     <script src='qrc:///qtwebchannel/qwebchannel.js'></script> 
     <h1>hello</h1>           
     <ul>             
      <li>list item 1</li>              
      <li>list item 2</li>              
     </ul>                  
     <a href='#go'>GO</a>              
     <script>                  
     $(document).ready(function(){ 
      new QWebChannel(qt.webChannelTransport, function(channel){    
       $('h1').on('click', function({ 
        channel.objects.helperBridge.some_slot() 
       }); 
      }); 
     });                  
     </script> 
    </body> 

Referenzen:

Verwandte Themen