class run(QObject): # gtoAction def __init__(self, id, gtoTool, config, debug): super(run, self).__init__() # references self.debug = debug self.id = id self.config = config self.info = gtoTool.info try: self.action = gtoTool.action self.action.setCheckable(True) self.gtomain = gtoTool.gtomain self.helper = self.gtomain.helper self.metadata = self.gtomain.metadata self.iface = self.gtomain.iface self.canvas = self.iface.mapCanvas() if not self.config.get("is_widgetaction", False): # tool data self.toolbar_dock = self.config.get("toolbar_dock", 4) # widget self.toolbar = None # load toolbar self.objName = "gtoTB_" + gtoTool.action.objectName() + str(id) self.toolbar = self.gtomain.helper.findToolbar(self.iface, self.objName) if self.toolbar is None: if self.debug: self.info.log("load", self.objName) self.toolbar = QToolBar() self.toolbar.setObjectName(self.objName) self.toolbar.setWindowTitle(u'GTO Coordinate') self.toolbar.setAllowedAreas(Qt.BottomToolBarArea | Qt.TopToolBarArea) self.iface.mainWindow().addToolBarBreak(self.toolbar_dock) self.iface.addToolBar(self.toolbar, self.toolbar_dock) else: self.toolbar.clear() self.wid = GTOPointWidget(self.gtomain, self.toolbar) self.toolbar.addWidget(self.wid) if self.config.get("spacer", False): spacer = QWidget() spacer.setObjectName('spacer') spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) spacer.setStyleSheet("QWidget{background: transparent;}") self.toolbar.addWidget(spacer) self.wid.set_parent_widget(self) self.wid.isActive.connect(self.set_status) # not always(?) working? self.wid.setConfig(self.config) self.wid.added() self.wid.setMapTool() self.toolbar.show() except Exception as e: self.info.err(e) def set_status(self, isActive): try: self.action.setChecked(isActive) self.toolbar.setHidden(not isActive) except Exception as e: self.info.err(e)
def setHidden(self, hidden: bool) -> None: if hidden: self._eraser_option_toolbar.setHidden(hidden) self._selection_option_toolbar.setHidden(hidden) else: if self._tools_group.checkedAction() == self._rectangle_tool: self._selection_option_toolbar.setHidden(False) elif self._tools_group.checkedAction() == self._eraser_tool: self._eraser_option_toolbar.setHidden(False) QToolBar.setHidden(self, hidden)
class run(object): def __init__(self, id, gtoTool, config, debug): super(run, self).__init__() try: # references self.result = None self.debug = debug self.id = id self.config = config self.info = gtoTool.info self.gtomain = gtoTool.gtomain self.helper = self.gtomain.helper self.metadata = self.gtomain.metadata self.iface = self.gtomain.iface # tool data widegt self.toolbar_dock = self.config.get("toolbar_dock", None) # widget self.toolbar = None self.wid = Widget(self, self.iface.mainWindow()) if self.toolbar_dock is not None: # load toolbar objName = "gtoTB_" + gtoTool.action.objectName() self.toolbar = self.gtomain.helper.findToolbar( self.iface, objName) if self.toolbar is None: if self.debug: self.info.log("load", objName) self.toolbar = QToolBar() self.toolbar.setObjectName(objName) self.toolbar.setWindowTitle(u'GTO Suche') self.toolbar.setAllowedAreas(Qt.BottomToolBarArea | Qt.TopToolBarArea) self.iface.mainWindow().addToolBarBreak(self.toolbar_dock) self.iface.addToolBar(self.toolbar, self.toolbar_dock) else: self.toolbar.clear() self.toolbar.setHidden(False) else: self.toolbar = self.gtomain.gtotb self.toolbar.addWidget(self.wid) if self.config.get("show_hide_button", False): self.helper.addToolbarClose(self.toolbar) self.toolbar.visibilityChanged.connect(self.reset) except Exception as e: self.info.err(e) def reset(self, *args): # from (gto)toolbar hidden/shown try: if self.debug: self.info.log("gtoAction reset") self.wid.reset() except Exception as e: self.info.err(e)
class BufferSelectToolbar(object): def __init__(self, selectTool): super(BufferSelectToolbar, self).__init__() # references self.selectTool = selectTool self.result = None self.debug = self.selectTool.debug self.id = id self.config = self.selectTool.config self.info = Info(self) try: self.gtomain = self.selectTool.gtomain self.helper = self.gtomain.helper self.metadata = self.gtomain.metadata self.iface = self.gtomain.iface self.canvas = self.iface.mapCanvas() # tool data self.toolbar_dock = self.config.get("toolbar_dock", 4) self.toolbar_height = self.gtomain.toolbar_height # widget self.toolbar = None # load toolbar objName = "gtoTB_" + __name__ + str(id) self.toolbar = self.gtomain.helper.findToolbar(self.iface, objName) if self.toolbar is None: if self.debug: self.info.log("load", objName) self.toolbar = QToolBar() self.toolbar.setObjectName(objName) self.toolbar.setWindowTitle(u'GTO Buffer Selection') self.toolbar.setAllowedAreas(Qt.BottomToolBarArea | Qt.TopToolBarArea) self.iface.mainWindow().addToolBarBreak(self.toolbar_dock) self.iface.addToolBar(self.toolbar, self.toolbar_dock) # set the iconsize=> changed when self.iface.addToolBar :S if self.toolbar_height is not None: self.toolbar.setMaximumHeight(self.gtomain.toolbar_height) self.toolbar.setMinimumHeight(self.gtomain.toolbar_height) else: self.toolbar.clear() self.wid = Widget(self) self.toolbar.addWidget(self.wid) self.wid.setIconSizes(self.iface.iconSize(False)) self.wid.geometry_changed.connect(self.getGeometry) self.toolbar.setHidden(False) except Exception as e: self.info.err(e) # from mActionbufferselectxy def setHidden(self, a0): self.toolbar.setHidden(a0) def setGeometry(self, geo, isValid, isCircle=False, isRectangle=False): self.toolbar.setHidden(False) if self.debug: self.info.log("setGeometry", geo.isEmpty(), isValid, isCircle, isRectangle) self.wid.setOriginalGeometry(geo, isValid, isCircle, isRectangle) def getGeometry(self, geo): self.selectTool.setGeometryToMapTool(geo)
class Browser(QMainWindow): def __init__(self, mainWin, webview=None): super().__init__(mainWin) self.showFullScreen() self.mainWin = mainWin self.webview = webview self.initUI() def initUI(self): global CREATE_BROWER # print("initUI") # self.setWindowFlags(Qt.FramelessWindowHint) # 去掉标题栏的代码 # 设置窗口标题 # self.setWindowTitle('LingBrowser') # 设置窗口图标 self.setWindowIcon(QIcon(':/icons/logo.png')) self.page = QWebEnginePage() self.page.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) # 支持视频播放 self.page.settings().setAttribute(QWebEngineSettings.JavascriptEnabled, True) self.page.settings().setAttribute(QWebEngineSettings.FullScreenSupportEnabled, True) if self.webview == None: # 初始化一个 tab self.webview = WebView(self) # self必须要有,是将主窗口作为参数,传给浏览器 self.page.setUrl(QUrl(HOME_PAGE)) self.page.windowCloseRequested.connect(self.on_windowCloseRequested) # 页面关闭请求 if CREATE_BROWER: CREATE_BROWER = False self.page.profile().downloadRequested.connect(self.on_downloadRequested) # 页面下载请求 self.t = WebEngineUrlRequestInterceptor() self.page.profile().setRequestInterceptor(self.t) self.webview.setPage(self.page) self.url = self.webview.page().url() self.initToolbar(self.webview) self.setCentralWidget(self.webview) self.center() def on_downloadRequested(self, downloadItem): # print("download..") # print(downloadItem.downloadFileName()) # print('isFinished', downloadItem.isFinished()) # print('isPaused', downloadItem.isPaused()) # print('isSavePageDownload', downloadItem.isSavePageDownload()) # print('path', downloadItem.path()) # print('url', downloadItem.url()) downloadFileName, ok2 = QFileDialog.getSaveFileName(self, "文件保存", downloadItem.path(), "All Files (*)") print(downloadItem.path()) downloadItem.setPath(downloadFileName) downloadItem.accept() downloadItem.finished.connect(self.on_downloadfinished) downloadItem.downloadProgress.connect(self.on_downloadProgress) def on_downloadfinished(self): print() def on_downloadProgress(self, int_1, int_2): rate = str(round(int_1 / int_2, 2) * 100).split(".")[0] self.mainWin.statusBarDownloadLabel.setText("文件下载 " + rate + "%") if int(rate) == 100: self.mainWin.statusBarDownloadLabel.setHidden(True) self.mainWin.statusBar.setHidden(True) else: self.mainWin.statusBarDownloadLabel.setHidden(False) self.mainWin.statusBar.setHidden(False) def on_windowCloseRequested(self): print("close tab") # self.webview.close() # del self.webview # sip.delete(self.webview) # self.webview # self.webview.page().profile().deleteLater() # self.deleteLater() pass def moreMenuShow(self): try: self.contextMenu = QMenu() self.contextMenu.setObjectName("moreMenu") self.contextMenu.setFont(fontawesome("far")) # self.actionA = self.contextMenu.addAction(self.zoom_in_action) # self.actionA = self.contextMenu.addAction(self.zoom_out_action) self.contextMenu.popup( QPoint(self.mainWin.x() + self.more_button.x() - 200, self.mainWin.y() + 75)) # 2菜单显示的位置 QCursor.pos() # print(self.more_button.x()) # print(self.more_button.y()) # print(self.frameGeometry()) # print(self.mainWin.x()) # print(self.mainWin.y()) self.contextMenu.setContentsMargins(25,0,0,0) self.contextMenu.addMenu("打印") self.contextMenu.addSeparator() # 缩放组合 sf_widget = QWidget(self) sf_widget.setProperty("class","qwidget") sf_widget.setObjectName("sf_widget") sf_widget.setContentsMargins(0,0,0,0) # sf_widget.setFixedHeight(20) sf_layout = QHBoxLayout() sf_layout.setContentsMargins(0,0,0,0) sf_widget.setLayout(sf_layout) sf_label = QLabel("缩放") sf_label.setObjectName("sf_item_label") sf_layout.addWidget(sf_label) sf_layout.addWidget(self.zoom_out_button) sf_layout.addWidget(self.sf_label_rate) sf_layout.addWidget(self.zoom_in_button) sf_layout.addWidget(self.full_screen_button) sf_action = QWidgetAction(self) sf_action.setDefaultWidget(sf_widget) self.actionA = self.contextMenu.addAction(sf_action) # self.actionA.triggered.connect(self.actionHandler) sf_layout.setSpacing(0) self.contextMenu.show() except Exception as e: print(e) def initToolbar(self, webview): pass ###使用QToolBar创建导航栏,并使用QAction创建按钮 # 添加导航栏 self.navigation_bar = QToolBar('Navigation') # 锁定导航栏 self.navigation_bar.setMovable(False) # 设定图标的大小 self.navigation_bar.setIconSize(QSize(2, 2)) # 添加导航栏到窗口中 self.addToolBar(self.navigation_bar) # 添加其它配置 self.navigation_bar.setObjectName("navigation_bar") self.navigation_bar.setCursor(Qt.ArrowCursor) # QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中 # 添加前进、后退、停止加载和刷新的按钮 self.reload_icon = unichr(0xf2f9) self.stop_icon = unichr(0xf00d) # 后退按钮 self.back_action = QWidgetAction(self) self.back_button = QPushButton(unichr(0xf060), self, clicked=webview.back, font=fontawesome("far"), objectName='back_button') self.back_button.setToolTip("后退") self.back_button.setCursor(Qt.ArrowCursor) self.back_action.setDefaultWidget(self.back_button) # 前进按钮 self.next_action = QWidgetAction(self) self.next_button = QPushButton(unichr(0xf061), self, clicked=webview.forward, font=fontawesome("far"), objectName='next_button') self.next_button.setToolTip("前进") self.next_button.setCursor(Qt.ArrowCursor) self.next_action.setDefaultWidget(self.next_button) # 刷新与停止按钮 self.reload_action = QWidgetAction(self) self.reload_button = QPushButton(self.reload_icon, self, clicked=webview.reload, font=fontawesome("far"), objectName='reload_button') self.reload_button.setToolTip("刷新") self.reload_button.setCursor(Qt.ArrowCursor) self.reload_action.setDefaultWidget(self.reload_button) # 放大按钮 self.zoom_in_button = QPushButton(unichr(0xf067), self, clicked=self.zoom_in_func, font=fontawesome("far"), objectName='zoom_in_btn') self.zoom_in_button.setToolTip("放大") self.zoom_in_button.setCursor(Qt.ArrowCursor) # 缩小按钮 self.zoom_out_button = QPushButton(unichr(0xf068), self, clicked=self.zoom_out_func, font=fontawesome("far"), objectName='zoom_out_btn') self.zoom_out_button.setToolTip("缩小") self.zoom_out_button.setCursor(Qt.ArrowCursor) self.sf_label_rate = QLabel() self.sf_label_rate.setObjectName("sf_label_rate") self.sf_label_rate.setFixedWidth(30) self.sf_label_rate.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter) self.sf_label_rate.setProperty("class","qlabel") self.sf_label_rate.setText(str(int(self.webview.zoomFactor()*100))+"%") # 全屏按钮 self.full_screen_button = QPushButton(unichr(0xe140), self, clicked=self.full_screen_func, font=fontawesome("boot"), objectName='full_screen_button') self.full_screen_button.setToolTip("全屏") self.full_screen_button.setCursor(Qt.ArrowCursor) # 其它按钮 self.more_action = QWidgetAction(self) self.more_button = QPushButton(unichr(0xe235), self, clicked=self.moreMenuShow, font=fontawesome("boot"), objectName='more_button') self.more_button.setToolTip("页面控制及浏览器核心") self.more_button.setCursor(Qt.ArrowCursor) self.more_action.setDefaultWidget(self.more_button) # 首页按钮 self.index_action = QWidgetAction(self) self.index_button = QPushButton(unichr(0xf015), self, # clicked=self.zoom_out_func, font=fontawesome("far"), objectName='index_button') self.index_button.setToolTip("主页") self.index_button.setCursor(Qt.ArrowCursor) self.index_action.setDefaultWidget(self.index_button) # self.back_button.triggered.connect(webview.back) # self.next_button.triggered.connect(webview.forward) # self.reload_button.triggered.connect(webview.reload) # self.zoom_in_btn.triggered.connect(self.zoom_in_func) # self.zoom_out_btn.triggered.connect(self.zoom_out_func) # 将按钮添加到导航栏上 self.navigation_bar.addAction(self.back_action) self.navigation_bar.addAction(self.next_action) self.navigation_bar.addAction(self.reload_action) self.navigation_bar.addAction(self.index_action) # 添加URL地址栏 self.urlbar = QLineEdit() # 让地址栏能响应回车按键信号 self.urlbar.returnPressed.connect(self.navigate_to_url) # self.navigation_bar.addSeparator() self.navigation_bar.addWidget(self.urlbar) # self.navigation_bar.addSeparator() # self.navigation_bar.addAction(self.zoom_in_action) # self.navigation_bar.addAction(self.zoom_out_action) self.navigation_bar.addAction(self.more_action) # 让浏览器相应url地址的变化 webview.urlChanged.connect(self.renew_urlbar) webview.loadProgress.connect(self.processLoad) webview.loadStarted.connect(self.loadPage) webview.loadFinished.connect(self.loadFinish) webview.titleChanged.connect(self.renew_title) webview.iconChanged.connect(self.renew_icon) self.webBind() webview.show() self.navigation_bar.setIconSize(QSize(20, 20)) self.urlbar.setFont(QFont('SansSerif', 13)) def zoom_in_func(self): self.webview.setZoomFactor(self.webview.zoomFactor() + 0.1) self.sf_label_rate.setText(str(int(self.webview.zoomFactor()*100))+"%") def zoom_out_func(self): self.webview.setZoomFactor(self.webview.zoomFactor() - 0.1) self.sf_label_rate.setText(str(int(self.webview.zoomFactor()*100))+"%") def full_screen_func(self): self.navigation_bar.setHidden(True) self.mainWin.titleBar.setHidden(True) self.mainWin.showFullScreen() def on_network_call(self, info): print(info) pass def loadPage(self): # print("loadPage") # print(self.webview.objectName()) # self.renew_title("空页面") index = self.mainWin.tabWidget.currentIndex() self.mainWin.tabWidget.setTabIcon(index, QIcon(":icons/earth_128.png")) # self.reload_button.setDefaultWidget(self.stop_button_icon) self.reload_button.setText(self.stop_icon) self.reload_button.setToolTip("停止") def processLoad(self, rate): self.mainWin.statusBarLabelProgress.setValue(rate) self.mainWin.statusBarLabel.setText("网页加载") if rate == 0: self.mainWin.statusBarLabelProgress.setMaximum(0) self.mainWin.statusBarLabelProgress.setMinimum(0) else: self.mainWin.statusBarLabelProgress.setMaximum(0) self.mainWin.statusBarLabelProgress.setMinimum(100) if rate == 100: self.mainWin.statusBarLabelProgress.setHidden(True) self.mainWin.statusBarLabel.setHidden(True) self.mainWin.statusBar.setHidden(True) else: self.mainWin.statusBarLabelProgress.setHidden(False) self.mainWin.statusBarLabel.setHidden(False) self.mainWin.statusBar.setHidden(False) pass def loadFinish(self, isEnd): if isEnd: # print("load finished", isEnd) # self.reload_button.setDefaultWidget(self.reload_button_icon) self.reload_button.setText(self.reload_icon) self.reload_button.setToolTip("刷新") else: # print("load finished", isEnd) # print("load finished",isEnd) pass # index = self.webview.objectName() # title = self.page.title() # print("title", title) try: url = self.page.url().toString() except BaseException as base: url = self.webview.page().url().toString() # self.mainWin.tabWidget.setTabText(int(index), title if title else url) self.urlbar.setText(url) def webBind(self): # print("webBind") # self.back_button.disconnect() # self.next_button.disconnect() # self.stop_button.disconnect() # self.reload_button.disconnect() # self.add_button.disconnect() # self.back_button.triggered.connect(self.webview.back) # self.next_button.triggered.connect(self.webview.forward) # self.stop_button.triggered.connect(self.webview.stop) # self.reload_button.triggered.connect(self.webview.reload) # self.add_button.triggered.connect(self.mainWin.newTab) self.webview.urlChanged.connect(self.renew_urlbar) self.webview.titleChanged.connect(self.renew_title) self.webview.iconChanged.connect(self.renew_icon) def navigate_to_url(self): q = QUrl(self.urlbar.text()) if q.scheme() == '': q.setScheme('http') self.webview.setUrl(q) def renew_urlbar(self, url): # 将当前网页的链接更新到地址栏 # print("renew_urlbar") self.urlbar.setText(url.toString()) self.urlbar.setCursorPosition(0) # print("url", url)f def renew_title(self, title): # 将当前网页的标题更新到标签栏 index = self.webview.objectName() self.mainWin.tabWidget.setTabToolTip(int(index), title) title = " " + title[:11] + ".." if len(title) >= 12 else " " + title self.mainWin.tabWidget.setTabText(int(index), title) pass def renew_icon(self, icon): # 将当前网页的图标更新到标签栏 # print("renew_icon") index = self.webview.objectName() self.mainWin.tabWidget.setTabIcon(int(index), icon) def center(self): # print("center") qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) # 创建tab def create_tab(self, webview): # print("create_tab") self.tab = QWidget() self.mainWin.tabWidget.addTab(self.tab, "新标签页") self.mainWin.tabWidget.setCurrentWidget(self.tab) index = self.mainWin.tabWidget.currentIndex() # self.mainWin.tabWidget.setTabIcon(index, ":icons/logo.png") ##### self.Layout = QVBoxLayout(self.tab) self.Layout.setContentsMargins(0, 0, 0, 0) self.Layout.addWidget(Browser(self.mainWin, webview=webview)) webview.setObjectName(str(index)) self.mainWin.tab_[str(index)] = webview self.tab.setObjectName("tab_" + str(index))
tb.setObjectName(tb_name) tb.setWindowTitle("My Toolbar") iface.mainWindow().addToolBarBreak() #toolbar in new line iface.addToolBar(tb) else: tb.clear() #add actions to tb actionsList = [ "MyAPp:", "mActionSaveProject", "|", "mActionZoomIn", "mActionZoomOut", ["mActionMeasure", "mActionMeasureAngle", "mActionMeasureArea"] ] for a in actionsList: addAction(tb, a) #add a hide button btnObjectName = 'mClose_' + tb_name btn = tb.findChild(QPushButton, btnObjectName) if btn is None: btnHide = QPushButton() btnHide.setObjectName(btnObjectName) btnHide.setMaximumWidth(15) btnHide.setToolTip('close') btnHide.clicked.connect(lambda: tb.setHidden(True)) #spacer spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) tb.addWidget(spacer) tb.addWidget(btnHide) tb.show() except Exception as e: info(e)