def __init__(self, title=None, comment=None, icon=""): # self.widget = custom_widgets.SettingsWidget() self.dialog = widgets.BaseDialog() self.dialog.set_modality("application") self.dialog.setMinimumWidth(400) self.dialog.title = title self.dialog.set_icon(icon) self.dialog.set_layout("grid") self.dialog.box.set_spacing(20) self.dialog.box.set_margin(20) for i, (k, item) in enumerate(self._items.items()): self.dialog.box[i, item.label_col] = widgets.Label(item.label) self.dialog.box[i, item.label_col + 1:item.label_col + 3] = item.widget item.widget.id = k item.widget.value_changed.connect(self.on_update) for active in item.active_on: item.widget.setEnabled(self._items[active].widget.get_value()) self._items[active].widget.value_changed.connect( item.widget.setEnabled) for active in item.not_active_on: item.widget.setDisabled(self._items[active].widget.get_value()) self._items[active].widget.value_changed.connect( item.widget.setDisabled) if comment: label = widgets.Label(comment) label.setWordWrap(True) self.dialog.box[i + 1, 0:3] = label button_box = widgets.DialogButtonBox() self.ok_btn = button_box.add_default_button( "ok", callback=self.dialog.accept) button_box.add_default_button("cancel", callback=self.dialog.reject) self.dialog.box.append(button_box) self.on_update()
def __init__(self, title=None, comment=None, icon=""): # self.widget = custom_widgets.SettingsWidget() self.dialog = widgets.BaseDialog() self.dialog.set_modality("application") self.dialog.setMinimumWidth(400) self.dialog.title = title self.dialog.set_icon(icon) self.dialog.set_layout("grid") self.dialog.box.setSpacing(20) self.dialog.box.set_margin(20) for i, (k, item) in enumerate(self._items.items()): self.dialog.box[i, item.label_col] = widgets.Label(item.label) self.dialog.box[i, item.label_col + 1:item.label_col + 3] = item.widget item.widget.id = k for active in item.active_on: item.widget.setEnabled(self._items[active].widget.get_value()) self._items[active].widget.value_changed.connect(item.widget.setEnabled) for active in item.not_active_on: item.widget.setDisabled(self._items[active].widget.get_value()) self._items[active].widget.value_changed.connect(item.widget.setDisabled) if comment: label = widgets.Label(comment) label.setWordWrap(True) self.dialog.box[i + 1, 0:3] = label self.dialog.add_buttonbox()
def __init__(self, parent: QtWidgets.QWidget | None = None): super().__init__(parent=parent) self.set_layout("grid") self.slider = SpanSlider() self.label_lower = widgets.Label() self.label_upper = widgets.Label() self.box[0, 0:3] = self.slider self.box[1, 0] = self.label_lower self.box[1, 3] = self.label_upper self.slider.value_changed.connect(self.on_value_change)
def test_splitter(): widget = widgets.Splitter("vertical") test = widgets.Label("test") test2 = widgets.Label("test2") widget.add_widget(test) widget += test2 assert len(widget) == 2 assert widget[0] == test with open("data.pkl", "wb") as jar: pickle.dump(widget, jar) with open("data.pkl", "rb") as jar: widget = pickle.load(jar) for item in widget: pass widget.set_size_policy("expanding", "expanding") widget.set_orientation("horizontal")
def set_widget(self, widget, row, role: str = "both"): if isinstance(widget, str): widget = widgets.Label(widget) if isinstance(widget, QtWidgets.QLayout): self.set_layout(row, ROLES[role], widget) else: self.setWidget(row, ROLES[role], widget)
def __init__( self, show_flags: bool = True, show_error: bool = True, parent: QtWidgets.QWidget | None = None, ): super().__init__(parent=parent) self.set_layout("grid") self.lineedit = custom_widgets.SingleLineTextEdit() self.lineedit.set_syntaxhighlighter("regex") self.tb_flags = custom_widgets.BoolDictToolButton( "Flags", icon="mdi.flag-variant-outline") self.label_error = widgets.Label() error_color = self.get_palette().get_color("highlight") self.label_error.set_color(error_color) self.box[0, 0:1] = self.lineedit if show_flags: self.box[0, 2] = self.tb_flags if show_error: self.box[1, 0:2] = self.label_error val = custom_validators.RegexPatternValidator() val.error_occured.connect(self.label_error.set_text) val.pattern_updated.connect(self.value_changed) self.tb_flags.value_changed.connect(self._on_value_change) self.lineedit.set_validator(val) dct = dict( multiline="MultiLine", ignorecase="Ignore case", ascii="ASCII-only matching", dotall="Dot matches newline", verbose="Ignore whitespace", ) self.tb_flags.set_dict(dct)
def set_widget(self, widget: str | QtWidgets.QWidget, row: int, role: RoleStr = "both"): if isinstance(widget, str): widget = widgets.Label(widget) self.setWidget(row, ROLE[role], widget)
def add_tooltip_icon(self, text: str): label = widgets.Label(text) label.setToolTip(text) icon = iconprovider.get_icon("mdi.help-circle-outline") pixmap = icon.pixmap(20, 20) label.setPixmap(pixmap) self.box.add(label)
def add_separator(self, text: str | None = None, before: QtWidgets.QAction = None) -> QtWidgets.QAction: """Adds a separator showing an optional label. Args: text: Text to show on separator before: insert separator before specific action Returns: Separator action """ if text is None: if before: return self.insertSeparator(before) else: return self.addSeparator() else: label = widgets.Label(text) label.setMinimumWidth(self.minimumWidth()) with label.edit_stylesheet() as ss: ss.background.setValue("lightgrey") label.set_alignment(horizontal="center") if before: return self.insertWidget(before, label) else: return self.addWidget(label)
def test_statusbar(): widget = widgets.MainWindow() status_bar = widgets.StatusBar() status_bar.set_color("black") label = widgets.Label("test") status_bar.addWidget(label) status_bar.setup_default_bar() widget.setStatusBar(status_bar)
def test_label(): label = widgets.Label() label.set_image("") label.set_alignment(horizontal="left", vertical="top") label.set_text_interaction("by_mouse") with open("data.pkl", "wb") as jar: pickle.dump(label, jar) with open("data.pkl", "rb") as jar: label = pickle.load(jar) repr(label)
def create_dialog(self): dialog = widgets.Dialog() dialog.set_modality("application") dialog.setMinimumWidth(400) dialog.set_title(self.dialog_title) dialog.set_icon(self.dialog_icon) dialog.set_layout("grid") dialog.box.set_spacing(10) dialog.box.set_margin(20) button_box = widgets.DialogButtonBox() ok_btn = button_box.add_default_button("ok", callback=dialog.accept) button_box.add_default_button("cancel", callback=dialog.reject) widget_dict = {k: v.create_widget() for k, v in self._items.items()} widget_dict = {k: v for k, v in widget_dict.items() if v is not None} def on_update(): is_valid = all(i.is_valid() if hasattr(i, "is_valid") else True for i in widget_dict.values()) ok_btn.setEnabled(is_valid) for i, (k, item) in enumerate(self._items.items()): if k not in widget_dict: continue dialog.box[i, item.label_col] = widgets.Label(item.label) dialog.box[i, item.label_col + 1:item.label_col + 3] = widget_dict[k] widget = widget_dict[k] widget.set_id(k) widget.value_changed.connect(on_update) for active in item.enabled_on: widget.setEnabled(widget_dict[active].get_value()) widget_dict[active].value_changed.connect(widget.setEnabled) for active in item.disabled_on: widget.setDisabled(widget_dict[active].get_value()) widget_dict[active].value_changed.connect(widget.setDisabled) if self.dialog_comment: label = widgets.Label(self.dialog_comment) label.setWordWrap(True) dialog.box[len(self._items) + 1, 0:3] = label dialog.box.append(button_box) on_update() return dialog
def test_splitter(): widget = widgets.Splitter("vertical") test = widgets.Label("test") test2 = widgets.Label("test2") widget.add_widget(test) widget += test2 assert len(widget) == 2 assert widget[0] == test with open("data.pkl", "wb") as jar: pickle.dump(widget, jar) with open("data.pkl", "rb") as jar: widget = pickle.load(jar) for item in widget: pass widget.set_size_policy("expanding", "expanding") widget.set_orientation("horizontal") with pytest.raises(ValueError): widget.set_orientation("test") widget.add_layout(widgets.BoxLayout("horizontal")) widgets.Splitter.from_widgets([widgets.Widget()])
def __init__(self, parent=None, text=None): super().__init__(parent=parent) self.timer = core.Timer.single_shot(callback=self.close) self.label = widgets.Label() self.setWindowFlags(self.windowFlags() | QtCore.Qt.Tool | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint) layout = widgets.BoxLayout("vertical") layout.setContentsMargins(20, 20, 20, 20) self.setLayout(layout) self.setStyleSheet("background-color: black;") # 2a82da layout.addWidget(self.label)
def set_spanning_widget(self, row: int, widget): """set a widget spanning label and field position at given row Args: row: Row offset widget: widget / layout to get added to layout """ if isinstance(widget, str): widget = widgets.Label(widget) if isinstance(widget, QtWidgets.QLayout): self.setLayout(row, self.SpanningRole, widget) else: self.setWidget(row, self.SpanningRole, widget)
def set_label_widget(self, row: int, widget): """set a widget for the label position at given row Args: row: Row offset widget: widget to get added to layout """ if isinstance(widget, str): widget = widgets.Label(widget) if isinstance(widget, QtWidgets.QLayout): self.setLayout(row, self.LabelRole, widget) else: self.setWidget(row, self.LabelRole, widget)
def __init__(self, parent: QtWidgets.QWidget | None = None, text: str | None = None): super().__init__(parent=parent) self.timer = core.Timer.single_shot(callback=self.close) self.label = widgets.Label() self.set_flags(stay_on_top=True, frameless=True, tool=True) layout = widgets.BoxLayout("vertical") layout.set_margin(20) self.set_layout(layout) self.set_background_color("black") self.label.set_color("white") layout.add(self.label)
def test_label(): label = widgets.Label() label.set_image("") label.set_text("testus") label.set_alignment(horizontal="left", vertical="top") label.set_text_interaction("by_mouse") with pytest.raises(ValueError): label.set_text_interaction("test") # assert label.get_text_interaction() == "by_mouse" with open("data.pkl", "wb") as jar: pickle.dump(label, jar) with open("data.pkl", "rb") as jar: label = pickle.load(jar) repr(label)
def __init__( self, text: str | None = None, tooltip: str = "", icon: types.IconType = "mdi.help-circle-outline", parent: QtWidgets.QWidget | None = None, ): super().__init__(parent=parent) self.set_layout("horizontal") self.label = widgets.Label(text) self.label.setMargin(10) self.label.set_size_policy(horizontal="minimum") self.tooltip = tooltip icon = iconprovider.get_icon(icon) self.icon = widgets.Label() self.icon.setToolTip(tooltip) self.icon.set_size_policy(horizontal="minimum") pixmap = icon.pixmap(20, 20) self.icon.setPixmap(pixmap) self.box.add(self.label) self.box.add(self.icon) self.box.setSpacing(0) self.box.addStretch()
def test_statusbar(): widget = widgets.MainWindow() status_bar = widgets.StatusBar() status_bar.set_color("black") label = widgets.Label("test") status_bar.addWidget(label) status_bar.setup_default_bar() status_bar.show_message("test") status_bar.add_action(widgets.Action()) status_bar += widgets.Action() widget.setStatusBar(status_bar) status_bar.add_widget(widgets.Widget()) status_bar += widgets.Widget() status_bar.add_widget(widgets.Widget(), permanent=True)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.tool_tip = widgets.Label() self.tool_tip.set_flags(frameless=True, tooltip=True) self.tool_tip.set_attributes( transparent_for_mouse_events=True, no_system_background=True, translucent_background=True, ) self.tool_tip.hide() self.slide_anim = custom_animations.SlideAnimation(duration=1000) self.slide_anim.apply_to(self.tool_tip) self.fade_anim = custom_animations.FadeInAnimation(duration=1000) self.fade_anim.apply_to(self.tool_tip) self.animation = self.slide_anim | self.fade_anim
def _separator(self, text: str) -> widgets.WidgetAction: """returns a separator showing a label Args: text: Text to show on separator Returns: Separator widget """ label = widgets.Label(text) label.setMinimumWidth(self.minimumWidth()) label.setStyleSheet("background:lightgrey") label.set_alignment(horizontal="center") separator = widgets.WidgetAction(self) separator.setDefaultWidget(label) return separator
def add_separator(self, text: str | None = None) -> widgets.WidgetAction: """Adds a separator showing an optional label. Args: text: Text to show on separator Returns: Separator action """ separator = widgets.WidgetAction(parent=self) if text is None: separator.setSeparator(True) else: label = widgets.Label(text) label.setMinimumWidth(self.minimumWidth()) with label.edit_stylesheet() as ss: ss.background.setValue("lightgrey") label.set_alignment(horizontal="center") separator.setDefaultWidget(label) separator.setEnabled(False) self.add(separator) return separator
def __init__(self, parent: QtWidgets.QWidget | None = None): super().__init__(parent) layout = widgets.BoxLayout("horizontal") row_nb = 14 cindex = 0 for k, v in widgets.style.STANDARD_PIXMAP.items(): if cindex == 0: col_layout = widgets.BoxLayout("vertical") icon_layout = widgets.BoxLayout("horizontal") icon = widgets.Application.get_style_icon(k) label = widgets.Label() label.setPixmap(icon.pixmap(32, 32)) icon_layout.addWidget(label) icon_layout.addWidget(widgets.LineEdit(k)) col_layout.addLayout(icon_layout) cindex = (cindex + 1) % row_nb if cindex == 0: layout.addLayout(col_layout) self.set_layout(layout) self.set_title("Standard Platform Icons") icon = widgets.Application.get_style_icon("titlebar_menu_button") self.set_icon(icon)
def test_label(): widget = widgets.Label() widget.show() widget.close()
pos = self.getItemPosition(index) return pos[0], ROLES.inv[pos[1]] @classmethod def from_dict(cls, dct, parent=None): formlayout = cls(parent) for i, (k, v) in enumerate(dct.items(), start=1): if k is not None: formlayout[i, "left"] = k if v is not None: formlayout[i, "right"] = v return formlayout def add(self, item): if isinstance(item, (QtWidgets.QWidget, QtWidgets.QLayout)): self.addRow(item) if isinstance(item, tuple): self.addRow(*item) if __name__ == "__main__": app = widgets.app() dct = {"key": widgets.Label("test"), None: widgets.Label("test 2")} layout = FormLayout.from_dict(dct) layout[3] = "hellooo" widget = widgets.Widget() widget.set_layout(layout) widget.show() app.exec_()
self.progress_bar.hide() self.progress_bar.setRange(0, 0) self.progress_bar.setFixedSize(200, 20) self.progress_bar.setTextVisible(False) self.addPermanentWidget(self.progress_bar) def add_action(self, action): self.addAction(action) def set_color(self, color): self.setStyleSheet(f"background-color: {color};") def add_widget(self, widget, permanent=False): if permanent: self.addPermanentWidget(widget) else: self.addWidget(widget) if __name__ == "__main__": app = widgets.app() dlg = widgets.MainWindow() status_bar = StatusBar() status_bar.set_color("black") label = widgets.Label("test") status_bar.addWidget(label) status_bar.setup_default_bar() dlg.setStatusBar(status_bar) dlg.show() app.exec_()
def create_label(text: str): label = widgets.Label(text) label.setFrameStyle(widgets.Frame.Box | widgets.Frame.Raised) return label
def __init__( self, title: str = "Regex Editor", regex: str = "", teststring: str = "", parent: QtWidgets.QWidget | None = None, ): super().__init__(parent) self.resize(1200, 800) self.set_title(title) self.set_icon("mdi.regex") self.set_layout("horizontal") self.left_layout = widgets.BoxLayout("vertical") self.right_layout = widgets.BoxLayout("vertical") self.prog: Pattern | None = None self.matches: list[Match] = list() self.groupbox = widgets.GroupBox(title="Regular expression") self.grid = widgets.GridLayout(self.groupbox) self.layout_toprow = widgets.BoxLayout("horizontal") self.regexinput = custom_widgets.RegexInput() self.regexinput.set_min_size(400, 0) self.layout_toprow.add(self.regexinput) self.grid.add(self.layout_toprow, 1, 0) self.left_layout.add(self.groupbox) self.groupbox_teststring = widgets.GroupBox(title="Test strings") self.groupbox_teststring.set_layout("grid") self.textedit_teststring = widgets.PlainTextEdit(teststring) self.textedit_teststring.set_min_size(400, 0) self.groupbox_teststring.box.add(self.textedit_teststring, 0, 0) self.label_num_matches = widgets.Label("No match") self.label_num_matches.set_alignment("center") self.left_layout.add(self.groupbox_teststring) self.groupbox_sub = widgets.GroupBox(title="Substitution", checkable=True) self.layout_sub = widgets.GridLayout(self.groupbox_sub) self.lineedit_sub = widgets.LineEdit() self.lineedit_sub.textChanged.connect(self.update_sub_textedit) self.textedit_sub = widgets.PlainTextEdit() self.textedit_sub.set_min_size(400, 0) self.textedit_sub.set_read_only() self.layout_sub.add(self.lineedit_sub, 0, 0) self.layout_sub.add(self.textedit_sub, 1, 0) self.left_layout.add(self.groupbox_sub) self.cb_quickref = widgets.CheckBox("Show Regular Expression Quick Reference") self.left_layout.add(self.cb_quickref) self.table_matches = widgets.TableView() self.table_matches.setup_list_style() self.box.add(self.left_layout) self.box.add(self.right_layout) self.right_layout.add(self.label_num_matches) self.right_layout.add(self.table_matches) model = custom_models.RegexMatchesModel() self.table_matches.set_model(model) self.table_matches.setColumnWidth(0, 60) self.table_matches.setColumnWidth(1, 60) self.groupbox_sub.toggled.connect(self.lineedit_sub.setVisible) self.groupbox_sub.toggled.connect(self.textedit_sub.setVisible) doc = self.textedit_teststring.document() self._highlighter = RegexMatchHighlighter(doc) self._highlighter.rehighlight() self.cb_quickref.stateChanged.connect(self.quick_ref_requested) self.regexinput.value_changed.connect(self._update_view) self.textedit_teststring.textChanged.connect(self._update_view) self.regexinput.pattern = regex self._update_view()
return not self._is_collapsed def expand(self): self._button.set_arrow_type("down") self._panel.setVisible(True) self._is_collapsed = False self.set_size_policy("minimum_expanding", "minimum_expanding") def collapse(self): self._panel.setVisible(False) self._button.set_arrow_type("right") self._is_collapsed = True self.set_size_policy("preferred", "preferred") @core.Slot() def on_button_click(self): if self._is_collapsed: self.expand() self.expanded.emit() else: self.collapse() self.collapsed.emit() if __name__ == "__main__": app = widgets.app() widget = CollapsibleFrame() widget.add_widget(widgets.Label("test")) widget.show() app.main_loop()