def __init__(self, name="MyLensApp", width=640, height=480, inspector=False, start_maximized=False, *args, **kwargs): super(LensViewQt5, self).__init__(name=name, width=width, height=height, *args, **kwargs) # prepare Qt DBus mainloop DBusQtMainLoop(set_as_default=True) self._app = QApplication(*args, **kwargs) self._app_loaded = False self.view = None self.page = None self.channel = None self._manager = ThreadManagerQt5(app=self._app) self.start_maximized = start_maximized self.inspector = inspector self._build_app()
class LensViewQt5(View): def __init__(self, name="MyLensApp", width=640, height=480, inspector=False, start_maximized=False, *args, **kwargs): super(LensViewQt5, self).__init__(name=name, width=width, height=height, *args, **kwargs) # prepare Qt DBus mainloop DBusQtMainLoop(set_as_default=True) self._app = QApplication(*args, **kwargs) self._app_loaded = False self.view = None self.page = None self.channel = None self._manager = ThreadManagerQt5(app=self._app) self.start_maximized = start_maximized self.inspector = inspector self._build_app() def _build_app(self): if self.inspector: os.environ.update( {'QTWEBENGINE_REMOTE_DEBUGGING': '127.0.0.1:23654'}) # build webkit container self.view = QtWebEng.QWebEngineView() self.page = LensQWebEnginePage() self.channel = QWebChannel(self.page) self.window = LensMainWindow(title=self._app_name, width=self.width, height=self.height) # Subclass must load the first URL to be displayed. # Here is an example: # self.web_page.load(QUrl('qrc:///static/view_wrap.html')) self.view.setContextMenuPolicy(Qt.NoContextMenu) self.page.setView(self.view) # connect to Qt signals self.view.loadFinished.connect(self._loaded_cb) self.view.titleChanged.connect(self._title_changed_cb) self._app.lastWindowClosed.connect(self._last_window_closed_cb) self._cnam = CustomNetworkAccessManager(page=self.page) self.page.set_network_access_manager(self._cnam) # connect to Lens signals self.on('__close_app', self._close_cb) # center on screen frame_geometry = self.window.frameGeometry() active_screen = self._app.desktop().screenNumber( self._app.desktop().cursor().pos()) _center = self.app.desktop().screenGeometry(active_screen).center() frame_geometry.moveCenter(_center) self.window.move(frame_geometry.topLeft()) self.window.setCentralWidget(self.view) if self.start_maximized: self.window.showMaximized() def _close_cb(self): self.emit('app.close') self._app.exit() def _last_window_closed_cb(self, *args): self.emit('__close_app', *args) def _loaded_cb(self, success): # show window once some page has loaded self._lensview.show() if self.start_maximized: self.toggle_window_maximize() if not self.app_loaded: self._app_loaded = True self.emit('app.loaded') def _title_changed_cb(self, title): _in = str(title) # check for "_BR::" leader to determine we're crossing # the python/JS bridge if _in is None or not _in.startswith('_BR::'): return try: _in = json.loads(_in[5:]) _name = _in.setdefault('name', '') _args = _in.setdefault('args', []) except: return # emit our python/js bridge signal self.emit(_name, *_args) def _run(self): signal.signal(signal.SIGINT, signal.SIG_DFL) self._app.exec_() def emit_js(self, name, *args): self.view.runJavaScript( str(self._javascript % json.dumps([name] + list(args)))) def load_uri(self, uri): uri_base = os.path.dirname(uri) + '/' self.set_uri_app_base(uri_base) path = uri_base + 'app.html' stream = QFile(path) if stream.open(QFile.ReadOnly): data = str(stream.readAll(), 'utf-8') self._lensview.setHtml(data, QUrl('file://' + uri_base)) def set_inspector(self, state): self._lensview.set_inspector(state) def set_size(self, width, height): self._lensview.setMinimumSize(width, height) self._lensview.resize(width, height) def set_title(self, title): self._lensview.setWindowTitle(str(title)) def set_uri_app_base(self, uri): self._cnam.uri_app_base = uri def set_uri_lens_base(self, uri): self._cnam.uri_lens_base = uri def toggle_window_maximize(self): if self.view.windowState() & Qt.WindowMaximized: self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowMaximized) self.emit_js('window-unmaximized') else: self.view.setWindowState(self._lensview.windowState() | Qt.WindowMaximized) self.emit_js('window-maximized') def toggle_window_fullscreen(self): if self.view.windowState() & Qt.WindowFullScreen: self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowFullScreen) self.emit_js('window-unfullscreen') else: self.view.setWindowState(self._lensview.windowState() | Qt.WindowFullScreen) self.emit_js('window-fullscreen')
class LensViewQt5(View): def __init__(self, name="MyLensApp", width=640, height=480, inspector=False, start_maximized=False, *args, **kwargs): super(LensViewQt5, self).__init__(name=name, width=width, height=height, *args, **kwargs) # prepare Qt DBus mainloop DBusQtMainLoop(set_as_default=True) self._app = QApplication(*args, **kwargs) self._app_loaded = False self.view = None self.page = None self.channel = None self._manager = ThreadManagerQt5(app=self._app) self.start_maximized = start_maximized self.inspector = inspector self._build_app() def _build_app(self): if self.inspector: os.environ.update({'QTWEBENGINE_REMOTE_DEBUGGING': '127.0.0.1:23654'}) # build webkit container self.view = QtWebEng.QWebEngineView() self.page = LensQWebEnginePage() self.channel = QWebChannel(self.page) self.window = LensMainWindow(title=self._app_name, width=self.width, height=self.height) # Subclass must load the first URL to be displayed. # Here is an example: # self.web_page.load(QUrl('qrc:///static/view_wrap.html')) self.view.setContextMenuPolicy(Qt.NoContextMenu) self.page.setView(self.view) # connect to Qt signals self.view.loadFinished.connect(self._loaded_cb) self.view.titleChanged.connect(self._title_changed_cb) self._app.lastWindowClosed.connect(self._last_window_closed_cb) self._cnam = CustomNetworkAccessManager(page=self.page) self.page.set_network_access_manager(self._cnam) # connect to Lens signals self.on('__close_app', self._close_cb) # center on screen frame_geometry = self.window.frameGeometry() active_screen = self._app.desktop().screenNumber(self._app.desktop().cursor().pos()) _center = self.app.desktop().screenGeometry(active_screen).center() frame_geometry.moveCenter(_center) self.window.move(frame_geometry.topLeft()) self.window.setCentralWidget(self.view) if self.start_maximized: self.window.showMaximized() def _close_cb(self): self.emit('app.close') self._app.exit() def _last_window_closed_cb(self, *args): self.emit('__close_app', *args) def _loaded_cb(self, success): # show window once some page has loaded self._lensview.show() if self.start_maximized: self.toggle_window_maximize() if not self.app_loaded: self._app_loaded = True self.emit('app.loaded') def _title_changed_cb(self, title): _in = str(title) # check for "_BR::" leader to determine we're crossing # the python/JS bridge if _in is None or not _in.startswith('_BR::'): return try: _in = json.loads(_in[5:]) _name = _in.setdefault('name', '') _args = _in.setdefault('args', []) except: return # emit our python/js bridge signal self.emit(_name, *_args) def _run(self): signal.signal(signal.SIGINT, signal.SIG_DFL) self._app.exec_() def emit_js(self, name, *args): self.view.runJavaScript(str(self._javascript % json.dumps([name] + list(args)))) def load_uri(self, uri): uri_base = os.path.dirname(uri) + '/' self.set_uri_app_base(uri_base) path = uri_base + 'app.html' stream = QFile(path) if stream.open(QFile.ReadOnly): data = str(stream.readAll(), 'utf-8') self._lensview.setHtml(data, QUrl('file://' + uri_base)) def set_inspector(self, state): self._lensview.set_inspector(state) def set_size(self, width, height): self._lensview.setMinimumSize(width, height) self._lensview.resize(width, height) def set_title(self, title): self._lensview.setWindowTitle(str(title)) def set_uri_app_base(self, uri): self._cnam.uri_app_base = uri def set_uri_lens_base(self, uri): self._cnam.uri_lens_base = uri def toggle_window_maximize(self): if self.view.windowState() & Qt.WindowMaximized: self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowMaximized) self.emit_js('window-unmaximized') else: self.view.setWindowState(self._lensview.windowState() | Qt.WindowMaximized) self.emit_js('window-maximized') def toggle_window_fullscreen(self): if self.view.windowState() & Qt.WindowFullScreen: self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowFullScreen) self.emit_js('window-unfullscreen') else: self.view.setWindowState(self._lensview.windowState() | Qt.WindowFullScreen) self.emit_js('window-fullscreen')