Paste Search Dynamic
zoom-and-embed
  1. from PyQt5.QtWebEngineWidgets import QWebEngineView
  2. from PyQt5 import QtWebEngineWidgets, QtWidgets
  3. from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QVariant
  4. from PyQt5.QtWebChannel import QWebChannel
  5.  
  6.  
  7. class CallHandler(QObject):
  8.  
  9.     @pyqtSlot(result=QVariant)
  10.     def test(self):
  11.         print('call received')
  12.         return QVariant({"abc": "def", "ab": 22})
  13.  
  14.     # take an argument from javascript - JS:  handler.test1('hello!')
  15.     @pyqtSlot(QVariant, result=QVariant)
  16.     def test1(self, args):
  17.       print('i got')
  18.       print(args)
  19.       return "ok"
  20.  
  21.     @pyqtSlot(result=QVariant)
  22.     def click(self):
  23.         print('python click() from javascript call')
  24.         #super.setHTML('')
  25.         return QVariant({"python returns": "hello world"})
  26.  
  27. HTML = ("  <!DOCTYPE html>          \n"
  28.         "            <html>         \n"
  29.         "                <head>     \n"
  30.         "                <script src=\"qrc:///qtwebchannel/qwebchannel.js\"></script>\n"
  31.         "                <style>    \n"
  32.         "                  html { background: lightblue }   \n"
  33.         "                  h1   { color: purple }           \n"
  34.         "                </style>                           \n"
  35.         "                </head>                            \n"
  36.         "                <body>                             \n"
  37.         "                  <div>                            \n"
  38.         "                    <h1>Hello, I am defined in Python. </h1>               \n"
  39.         "                    <div id=\"content\"></div>                             \n"
  40.         "                    <button onclick=\"myFunction()\">Click me</button>     \n"
  41.         "                  </div>                                                   \n"
  42.         "                    <script language=\"JavaScript\">                       \n"
  43.         "                        new QWebChannel(qt.webChannelTransport, function (channel) {\n"
  44.         "                            window.handler = channel.objects.handler;      \n"
  45.         "                            handler.test(function(retVal) {                \n"
  46.         "                              // console.error as console.log message don't show up in the python console\n"
  47.         "                              console.error(JSON.stringify(retVal));       \n"
  48.         "                              })   \n"
  49.         "                                   \n"
  50.         "                            });    \n"
  51.         "                                   \n"
  52.         "                            function myFunction() {                        \n"
  53.         "                              new QWebChannel(qt.webChannelTransport, function (channel) { \n"
  54.         "                                  window.handler = channel.objects.handler;\n"
  55.         "                                  handler.click(function(retVal) {         \n"
  56.         "                                    // console.error as console.log message don't show up in the python console\n"
  57.         "                                    console.error(JSON.stringify(retVal)); \n"
  58.         "                                    document.getElementById(\"content\").innerHTML = JSON.stringify(retVal);   \n"
  59.         "                              })   \n"
  60.         "                            });    \n"
  61.         "                        }          \n"
  62.         "                    </script>      \n"
  63.         "                </body>            \n"
  64.         "            </html>                \n"
  65.         "        ")
  66.  
  67. class WebView(QWebEngineView):
  68.  
  69.     def __init__(self):
  70.         super(WebView, self).__init__()
  71.         self.channel = QWebChannel()
  72.         self.handler = CallHandler()
  73.         self.channel.registerObject('handler', self.handler)
  74.         self.page().setWebChannel(self.channel)
  75.  
  76.         # zoom in
  77.         self.setZoomFactor(1.5)
  78.  
  79. if __name__ == '__main__':
  80.     import sys
  81.  
  82.     app = QtWidgets.QApplication(sys.argv)
  83.     view = WebView()
  84.     view.setHtml(HTML)
  85.     view.show()
  86.  
  87.     sys.exit(app.exec_())
  88.  
Parsed in 0.024 seconds