class VariablesTool(DockTool): """docstring for Variables tool.""" def __init__(self): super(VariablesTool, self).__init__() self.setMinimumSize(QtCore.QSize(200, 50)) self.content = QWidget() self.content.setObjectName("VariablesToolContent") self.verticalLayout = QVBoxLayout(self.content) self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.setWidget(self.content) @staticmethod def getIcon(): return QtGui.QIcon(":variable.png") @staticmethod def isSingleton(): return True def onShow(self): super(VariablesTool, self).onShow() varsWidget = VariablesWidget(self.pyFlowInstance) self.pyFlowInstance.fileBeenLoaded.connect(varsWidget.actualize) self.verticalLayout.addWidget(varsWidget) @staticmethod def toolTip(): return "Variables editing/creation" @staticmethod def name(): return str("Variables")
class VariablesTool(DockTool): """docstring for Variables tool.""" def __init__(self): super(VariablesTool, self).__init__() self.setMinimumSize(QtCore.QSize(200, 50)) self.content = QWidget() self.content.setObjectName("VariablesToolContent") self.verticalLayout = QVBoxLayout(self.content) self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.setWidget(self.content) @staticmethod def getIcon(): return QtGui.QIcon(RESOURCES_DIR + "/variable.png") @staticmethod def isSingleton(): return True def onShow(self): super(VariablesTool, self).onShow() self.verticalLayout.addWidget(VariablesWidget(self.canvas)) @staticmethod def toolTip(): return "Variables editing/creation" @staticmethod def name(): return str("Variables")
class HistoryTool(DockTool): """docstring for History tool.""" def __init__(self): super(HistoryTool, self).__init__() self.setMinimumSize(QtCore.QSize(200, 50)) self.content = QWidget() self.content.setObjectName("historyToolContent") self.verticalLayout = QVBoxLayout(self.content) self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.undoStackView = QUndoView(self) self.undoStackView.setObjectName("undoStackView") self.verticalLayout.addWidget(self.undoStackView) self.setWidget(self.content) @staticmethod def getIcon(): return QtGui.QIcon(RESOURCES_DIR + "/history.png") def onShow(self): super(HistoryTool, self).onShow() self.undoStackView.setStack(self.canvas.undoStack) @staticmethod def defaultDockArea(): return QtCore.Qt.LeftDockWidgetArea @staticmethod def toolTip(): return "Undo stack" @staticmethod def name(): return str("History")
class Counters(QScrollArea): button_clicked = Signal(object, object) SPACING = 2 def __init__(self, parent=None): QScrollArea.__init__(self, parent) self.setWidgetResizable(True) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self._layout = QVBoxLayout() self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(Counters.SPACING) widget = QWidget() widget.setLayout(self._layout) self.setWidget(widget) self.setFixedWidth(200) self.checked_buttons = dict() def set(self, counters): previous_buttons = self.checked_buttons.copy() self.clear() for column, counter in counters.items(): for entry, value in counter.items(): checked = previous_buttons.get(entry, False) self.checked_buttons[entry] = checked button = QPushButton('{} {}'.format(entry, value)) button.setProperty(PROPERTY_SIDE_STROKED, checked) button.clicked.connect(self._clicked) self._layout.addWidget(button) self._layout.addWidget(QLabel()) self._layout.addWidget(QWidget()) self._layout.setStretch(self._layout.count() - 1, 100) def clear(self): clear_layout(self._layout) self.checked_buttons = dict() def _clicked(self): button = self.sender() checked = not button.property(PROPERTY_SIDE_STROKED) entry = button.text().split()[0] self.checked_buttons[entry] = checked button.setProperty(PROPERTY_SIDE_STROKED, checked) self.button_clicked.emit(entry, self.checked_buttons)
def get_horizontal_separator(): v_div_w = QWidget() v_div_l = QVBoxLayout() v_div_l.setAlignment(Qt.AlignLeft) v_div_l.setContentsMargins(0, 0, 0, 0) v_div_l.setSpacing(0) v_div_w.setLayout(v_div_l) v_div = QFrame() v_div.setMinimumHeight(30) v_div.setFrameShape(QFrame.VLine) v_div.setFrameShadow(QFrame.Sunken) v_div_l.addWidget(v_div) return v_div_w
def _build_ui(self): self._lyt_grid.setContentsMargins(0, 0, 0, 0) self._lyt_grid.setSpacing(10) self._lyt_grid.setAlignment(Qt.AlignTop | Qt.AlignLeft) scroll_area = QScrollArea() scroll_area.setFrameStyle(0) scroll_area.setWidget(QWidget()) scroll_area.widget().setLayout(self._lyt_grid) scroll_area.setWidgetResizable(True) lyt_main = QVBoxLayout() lyt_main.setContentsMargins(0, 0, 0, 0) lyt_main.setSpacing(0) lyt_main.addWidget(scroll_area) lyt_main.addWidget(self._toolbar) self.setLayout(lyt_main)
class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, url: QUrl) -> None: super().__init__() self.setupUi(self) self.m_cookies = [] self.m_urlLineEdit.setText(url.toString()) self.m_layout = QVBoxLayout() self.m_layout.addItem( QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.m_layout.setContentsMargins(0, 0, 0, 0) self.m_layout.setSpacing(0) w = QWidget() p = w.palette() p.setColor(self.widget.backgroundRole(), Qt.white) w.setPalette(p) w.setLayout(self.m_layout) self.m_scrollArea.setWidget(w) self.m_scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.m_scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.m_urlButton.clicked.connect(self.handleUrlClicked) self.m_deleteAllButton.clicked.connect(self.handleDeleteAllClicked) self.m_newButton.clicked.connect(self.handleNewClicked) self.m_store: QWebEngineCookieStore = self.m_webview.page().profile( ).cookieStore() self.m_store.cookieAdded.connect(self.handleCookieAdded) self.m_store.loadAllCookies() self.m_webview.load(url) def containsCookie(self, cookie: QNetworkCookie): for c in self.m_cookies: if c.hasSameIdentifier(cookie): return True return False @Slot(QNetworkCookie) def handleCookieAdded(self, cookie: QNetworkCookie): if self.containsCookie(cookie): return widget = CookieWidget(cookie) widget.setHighlighted(len(self.m_cookies) % 2) self.m_cookies.append(QNetworkCookie(cookie)) self.m_layout.insertWidget(0, widget) widget.deleteClicked.connect( partial(self._on_deleteClicked, QNetworkCookie(cookie), widget)) widget.viewClicked.connect( partial(self._on_viewClicked, QNetworkCookie(cookie))) def _on_deleteClicked(self, cookie: QNetworkCookie, widget: QWidget): self.m_store.deleteCookie(QNetworkCookie(cookie)) # FIXME # sip.delete(widget) self.m_cookies.remove(cookie) for i in range(self.m_layout.count() - 1, -1, -1): w = self.m_layout.itemAt(i).widget() if isinstance(w, CookieWidget): w.setHighlighted(i % 2) def _on_viewClicked(self, cookie): dialog = CookieDialog(cookie) dialog.exec_() @Slot() def handleDeleteAllClicked(self): self.m_store.deleteAllCookies() for i in range(self.m_layout.count() - 1, -1, -1): w = self.m_layout.itemAt(i).widget() if w: sip.delete(w) self.m_cookies.clear() @Slot() def handleNewClicked(self): dialog = CookieDialog() if dialog.exec_() == QDialog.Accepted: self.m_store.setCookie(QNetworkCookie(dialog.cookie())) @Slot() def handleUrlClicked(self): self.m_webview.load(QUrl.fromUserInput(self.m_urlLineEdit.text()))