def _init_ui(self): switch = MSwitch() switch.setChecked(True) slider = MSlider() slider.setRange(1, 10) switch_lay = QtWidgets.QFormLayout() switch_lay.addRow(MLabel("AutoPlay"), switch) switch_lay.addRow(MLabel("Interval"), slider) test = MCarousel( [ MPixmap("app-{}.png".format(a)) for a in ["maya", "nuke", "houdini"] ], width=300, height=300, autoplay=True, ) switch.toggled.connect(test.set_autoplay) slider.valueChanged.connect(lambda x: test.set_interval(x * 1000)) slider.setValue(3) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(test) main_lay.addLayout(switch_lay) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): size_lay = QHBoxLayout() size_list = [ ('Huge', MLoading.huge), ('Large', MLoading.large), ('Medium', MLoading.medium), ('Small', MLoading.small), ('Tiny', MLoading.tiny), ] for label, cls in size_list: size_lay.addWidget(MLabel(label)) size_lay.addWidget(cls()) size_lay.addSpacing(10) color_lay = QHBoxLayout() color_list = [('cyan', '#13c2c2'), ('green', '#52c41a'), ('magenta', '#eb2f96'), ('red', '#f5222d'), ('yellow', '#fadb14'), ('volcano', '#fa541c')] for label, color in color_list: color_lay.addWidget(MLabel(label)) color_lay.addWidget(MLoading.tiny(color=color)) color_lay.addSpacing(10) main_lay = QVBoxLayout() main_lay.addWidget(MDivider('different size')) main_lay.addLayout(size_lay) main_lay.addWidget(MDivider('different color')) main_lay.addLayout(color_lay) main_lay.addWidget(MDivider('loading wrapper')) # main_lay.addLayout(wrapper_lay) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): # 工具 item_list = [ {'text': u'文件', 'svg': 'folder_line.svg', 'clicked': self.openFile}, {'text': u'编辑', 'svg': 'edit_line.svg', 'clicked': self.editFile}, {'text': u'关于', 'svg': 'warning_line.svg', 'clicked': self.showAbout}, ] tool_bar = MMenuTabWidget() tool_bar.tool_bar_insert_widget(MLabel('Zeus').h4().secondary().strong()) self.user_toolButton = MToolButton().large() pixmap = QPixmap(file_path + "\\res\\headPortrial\\user_default.png") self.user_toolButton.setIcon(pixmap) tool_bar.tool_bar_append_widget( MBadge.dot(show=False, widget=self.user_toolButton)) self.label = MLabel(u"未登录") tool_bar.tool_bar_append_widget( MBadge.dot(show=False, widget=self.label)) for index, data_dict in enumerate(item_list): tool_bar.add_menu(data_dict, index) main_lay = QHBoxLayout() main_lay.setContentsMargins(0, 0, 0, 0) main_lay.addWidget(tool_bar) self.setLayout(main_lay) self.layout().setSpacing(0) self.layout().setContentsMargins(0, 0, 0, 0) self.user_toolButton.clicked.connect(self.setUser)
def __init__(self, text='', orientation=Qt.Horizontal, alignment=Qt.AlignCenter, parent=None): super(MDivider, self).__init__(parent) self._orient = orientation self._text_label = MLabel().secondary() self._left_frame = QFrame() self._right_frame = QFrame() self._main_lay = QHBoxLayout() self._main_lay.setContentsMargins(0, 0, 0, 0) self._main_lay.setSpacing(0) self._main_lay.addWidget(self._left_frame) self._main_lay.addWidget(self._text_label) self._main_lay.addWidget(self._right_frame) self.setLayout(self._main_lay) if orientation == Qt.Horizontal: self._left_frame.setFrameShape(QFrame.HLine) self._left_frame.setFrameShadow(QFrame.Sunken) self._right_frame.setFrameShape(QFrame.HLine) self._right_frame.setFrameShadow(QFrame.Sunken) else: self._text_label.setVisible(False) self._right_frame.setVisible(False) self._left_frame.setFrameShape(QFrame.VLine) self._left_frame.setFrameShadow(QFrame.Plain) self.setFixedWidth(2) self._main_lay.setStretchFactor(self._left_frame, self._alignment_map.get(alignment, 50)) self._main_lay.setStretchFactor(self._right_frame, 100 - self._alignment_map.get(alignment, 50)) self._text = None self.set_dayu_text(text)
def __init__(self, init_color, parent=None): super(MColorPaletteDialog, self).__init__(parent) self.setWindowTitle("DAYU Color Palette") self.primary_color = QtGui.QColor(init_color) self.color_chart = MColorChart() self.choose_color_button = QtWidgets.QPushButton() self.choose_color_button.setFixedSize(QtCore.QSize(100, 30)) self.color_label = QtWidgets.QLabel() self.info_label = MLabel() self.info_label.setProperty("error", True) color_lay = QtWidgets.QHBoxLayout() color_lay.addWidget(MLabel("Primary Color:")) color_lay.addWidget(self.choose_color_button) color_lay.addWidget(self.color_label) color_lay.addWidget(self.info_label) color_lay.addStretch() dialog = QtWidgets.QColorDialog(self.primary_color, parent=self) dialog.setWindowFlags(QtCore.Qt.Widget) dialog.setOption(QtWidgets.QColorDialog.NoButtons) dialog.currentColorChanged.connect(self.slot_color_changed) setting_lay = QtWidgets.QVBoxLayout() setting_lay.addLayout(color_lay) setting_lay.addWidget(MDivider()) setting_lay.addWidget(dialog) main_lay = QtWidgets.QHBoxLayout() main_lay.addWidget(self.color_chart) main_lay.addLayout(setting_lay) self.setLayout(main_lay) self.update_color()
def __init__(self, text='', parent=None, flags=0): super(MAlert, self).__init__(parent, flags) self.setAttribute(Qt.WA_StyledBackground) self._icon_label = MAvatar() self._icon_label.set_dayu_size(dayu_theme.tiny) self._content_label = MLabel().secondary() self._close_button = MToolButton().svg( 'close_line.svg').tiny().icon_only() self._close_button.clicked.connect( functools.partial(self.setVisible, False)) self._main_lay = QHBoxLayout() self._main_lay.setContentsMargins(8, 8, 8, 8) self._main_lay.addWidget(self._icon_label) self._main_lay.addWidget(self._content_label) self._main_lay.addStretch() self._main_lay.addWidget(self._close_button) self.setLayout(self._main_lay) self.set_show_icon(True) self.set_closeable(False) self._dayu_type = None self._dayu_text = None self.set_dayu_type(MAlert.InfoType) self.set_dayu_text(text)
def __init__(self, cover=None, avatar=None, title=None, description=None, extra=False, parent=None): super(MMeta, self).__init__(parent) self.setAttribute(Qt.WA_StyledBackground) # self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self._cover_label = QLabel() self._avatar = MAvatar() self._title_label = MLabel.h4() # self._title_label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.MinimumExpanding) self._description_label = MLabel.help() # self._description_label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.MinimumExpanding) self._description_label.setWordWrap(True) self._title_layout = QHBoxLayout() self._title_layout.addWidget(self._title_label) self._title_layout.addStretch() if extra: self._extra_button = MToolButton(type=MToolButton.IconOnlyType, icon=MIcon('more.svg')) self._title_layout.addWidget(self._extra_button) content_lay = QFormLayout() content_lay.setContentsMargins(5, 5, 5, 5) content_lay.addRow(self._avatar, self._title_layout) content_lay.addRow(self._description_label) self._button_layout = QHBoxLayout() main_lay = QVBoxLayout() main_lay.setSpacing(0) main_lay.setContentsMargins(1, 1, 1, 1) main_lay.addWidget(self._cover_label) main_lay.addLayout(content_lay) main_lay.addLayout(self._button_layout) main_lay.addStretch() self.setLayout(main_lay) self._cover_label.setFixedSize(QSize(200, 200))
def __init__(self, size=None, parent=None): super(MSequenceFile, self).__init__(parent) self.sequence_obj = None size = size or dayu_theme.small self._file_label = MLineEdit() self._file_label.set_dayu_size(size) self._file_label.setReadOnly(True) self._is_sequence_check_box = MCheckBox(self.tr('Sequence')) self._is_sequence_check_box.toggled.connect( functools.partial(self.setProperty, 'sequence')) self._is_sequence_check_box.toggled.connect( self.sig_is_sequence_changed) self._info_label = MLabel().secondary() self._error_label = MLabel().secondary() self._error_label.setProperty('error', True) self._error_label.setMinimumWidth(100) self._error_label.set_elide_mode(Qt.ElideMiddle) seq_lay = QHBoxLayout() seq_lay.addWidget(self._is_sequence_check_box) seq_lay.addWidget(self._info_label) seq_lay.addWidget(self._error_label) seq_lay.setStretchFactor(self._is_sequence_check_box, 0) seq_lay.setStretchFactor(self._info_label, 0) seq_lay.setStretchFactor(self._error_label, 100) self._main_lay = QVBoxLayout() self._main_lay.setContentsMargins(0, 0, 0, 0) self._main_lay.addWidget(self._file_label) self._main_lay.addLayout(seq_lay) self.setLayout(self._main_lay) self.set_sequence(True)
def __init__(self, text, duration=None, dayu_type=None, closable=False, parent=None): super(MMessage, self).__init__(parent) self.setObjectName('message') self.setWindowFlags( Qt.FramelessWindowHint | Qt.Dialog | Qt.WA_TranslucentBackground | Qt.WA_DeleteOnClose) self.setAttribute(Qt.WA_StyledBackground) if dayu_type == MMessage.LoadingType: _icon_label = MLoading.tiny() else: _icon_label = MAvatar.tiny() current_type = dayu_type or MMessage.InfoType _icon_label.set_dayu_image(MPixmap('{}_fill.svg'.format(current_type), vars(dayu_theme).get(current_type + '_color'))) self._content_label = MLabel(parent=self) # self._content_label.set_elide_mode(Qt.ElideMiddle) self._content_label.setText(text) self._close_button = MToolButton(parent=self).icon_only().svg('close_line.svg').tiny() self._close_button.clicked.connect(self.close) self._close_button.setVisible(closable or False) self._main_lay = QHBoxLayout() self._main_lay.addWidget(_icon_label) self._main_lay.addWidget(self._content_label) self._main_lay.addStretch() self._main_lay.addWidget(self._close_button) self.setLayout(self._main_lay) _close_timer = QTimer(self) _close_timer.setSingleShot(True) _close_timer.timeout.connect(self.close) _close_timer.timeout.connect(self.sig_closed) _close_timer.setInterval((duration or self.default_config.get('duration')) * 1000) _ani_timer = QTimer(self) _ani_timer.timeout.connect(self._fade_out) _ani_timer.setInterval((duration or self.default_config.get('duration')) * 1000 - 300) _close_timer.start() _ani_timer.start() self._pos_ani = QPropertyAnimation(self) self._pos_ani.setTargetObject(self) self._pos_ani.setEasingCurve(QEasingCurve.OutCubic) self._pos_ani.setDuration(300) self._pos_ani.setPropertyName('pos') self._opacity_ani = QPropertyAnimation() self._opacity_ani.setTargetObject(self) self._opacity_ani.setDuration(300) self._opacity_ani.setEasingCurve(QEasingCurve.OutCubic) self._opacity_ani.setPropertyName('windowOpacity') self._opacity_ani.setStartValue(0.0) self._opacity_ani.setEndValue(1.0) self._set_proper_position(parent) self._fade_int()
def test_label_dayu_style(qtbot, func, text, attr): """Test MLabel with different style""" label = MLabel(text) getattr(label, func)() qtbot.addWidget(label) assert label.property(attr) assert label.text() == text
def test_label_dayu_level(qtbot, func, text, attr): """Test MLabel with different level""" label = MLabel(text) getattr(label, func)() qtbot.addWidget(label) assert label.get_dayu_level() == attr assert label.text() == text
def __init__(self, title, position="right", closable=True, parent=None): super(MDrawer, self).__init__(parent) self.setObjectName("message") self.setWindowFlags(QtCore.Qt.Popup) # self.setWindowFlags( # Qt.FramelessWindowHint | Qt.Popup | Qt.WA_TranslucentBackground) self.setAttribute(QtCore.Qt.WA_StyledBackground) self._title_label = MLabel(parent=self).h4() # self._title_label.set_elide_mode(Qt.ElideRight) self._title_label.setText(title) self._close_button = (MToolButton( parent=self).icon_only().svg("close_line.svg").small()) self._close_button.clicked.connect(self.close) self._close_button.setVisible(closable or False) self._title_extra_lay = QtWidgets.QHBoxLayout() _title_lay = QtWidgets.QHBoxLayout() _title_lay.addWidget(self._title_label) _title_lay.addStretch() _title_lay.addLayout(self._title_extra_lay) _title_lay.addWidget(self._close_button) self._bottom_lay = QtWidgets.QHBoxLayout() self._bottom_lay.addStretch() self._scroll_area = QtWidgets.QScrollArea() self._scroll_area.setWidgetResizable(True) self._main_lay = QtWidgets.QVBoxLayout() self._main_lay.addLayout(_title_lay) self._main_lay.addWidget(MDivider()) self._main_lay.addWidget(self._scroll_area) self._main_lay.addWidget(MDivider()) self._main_lay.addLayout(self._bottom_lay) self.setLayout(self._main_lay) self._position = position self._close_timer = QtCore.QTimer(self) self._close_timer.setSingleShot(True) self._close_timer.timeout.connect(self.close) self._close_timer.timeout.connect(self.sig_closed) self._close_timer.setInterval(300) self._is_first_close = True self._pos_ani = QtCore.QPropertyAnimation(self) self._pos_ani.setTargetObject(self) self._pos_ani.setEasingCurve(QtCore.QEasingCurve.OutCubic) self._pos_ani.setDuration(300) self._pos_ani.setPropertyName(b"pos") self._opacity_ani = QtCore.QPropertyAnimation() self._opacity_ani.setTargetObject(self) self._opacity_ani.setDuration(300) self._opacity_ani.setEasingCurve(QtCore.QEasingCurve.OutCubic) self._opacity_ani.setPropertyName(b"windowOpacity") self._opacity_ani.setStartValue(0.0) self._opacity_ani.setEndValue(1.0)
class MCard(QWidget): def __init__(self, title=None, image=None, size=None, extra=None, type=None, parent=None): super(MCard, self).__init__(parent=parent) self.setAttribute(Qt.WA_StyledBackground) self.setProperty('border', False) size = size or dayu_theme.default_size map_label = { dayu_theme.large: (MLabel.H2Level, 20), dayu_theme.medium: (MLabel.H3Level, 15), dayu_theme.small: (MLabel.H4Level, 10), } self._title_label = MLabel(text=title) self._title_label.set_dayu_level(map_label.get(size)[0]) padding = map_label.get(size)[-1] self._title_layout = QHBoxLayout() self._title_layout.setContentsMargins(padding, padding, padding, padding) if image: self._title_icon = MAvatar() self._title_icon.set_dayu_image(image) self._title_icon.set_dayu_size(size) self._title_layout.addWidget(self._title_icon) self._title_layout.addWidget(self._title_label) self._title_layout.addStretch() if extra: self._extra_button = MToolButton().icon_only().svg('more.svg') self._title_layout.addWidget(self._extra_button) self._content_layout = QVBoxLayout() self._main_lay = QVBoxLayout() self._main_lay.setSpacing(0) self._main_lay.setContentsMargins(1, 1, 1, 1) if title: self._main_lay.addLayout(self._title_layout) self._main_lay.addWidget(MDivider()) self._main_lay.addLayout(self._content_layout) self.setLayout(self._main_lay) def get_more_button(self): return self._extra_button def set_widget(self, widget): self._content_layout.addWidget(widget) def border(self): self.setProperty('border', True) self.style().polish(self) return self
def _init_ui(self): item_list = [ { "text": "Overview", "svg": "home_line.svg", "clicked": functools.partial(MMessage.info, "首页", parent=self), }, { "text": "我的", "svg": "user_line.svg", "clicked": functools.partial(MMessage.info, "编辑账户", parent=self), }, { "text": "Notice", "svg": "alert_line.svg", "clicked": functools.partial(MMessage.info, "查看通知", parent=self), }, ] tool_bar = MMenuTabWidget() tool_bar_huge = MMenuTabWidget() tool_bar_huge.set_dayu_size(dayu_theme.huge) tool_bar_huge_v = MMenuTabWidget(orientation=QtCore.Qt.Vertical) tool_bar_huge_v.set_dayu_size(dayu_theme.huge) tool_bar.tool_bar_insert_widget( MLabel("DaYu").h4().secondary().strong()) tool_bar_huge.tool_bar_insert_widget( MLabel("DaYu").h4().secondary().strong()) dayu_icon = MLabel("DaYu").h4().secondary().strong() dayu_icon.setContentsMargins(10, 10, 10, 10) tool_bar_huge_v.tool_bar_insert_widget(dayu_icon) tool_bar.tool_bar_append_widget( MBadge.dot( show=True, widget=MToolButton().icon_only().svg("user_fill.svg").large())) for index, data_dict in enumerate(item_list): tool_bar.add_menu(data_dict, index) tool_bar_huge.add_menu(data_dict, index) tool_bar_huge_v.add_menu(data_dict, index) tool_bar.tool_button_group.set_dayu_checked(0) tool_bar_huge.tool_button_group.set_dayu_checked(0) tool_bar_huge_v.tool_button_group.set_dayu_checked(0) main_lay = QtWidgets.QVBoxLayout() main_lay.setContentsMargins(0, 0, 0, 0) main_lay.addWidget(MLabel("Menu Tab Widget (Large)")) main_lay.addWidget(tool_bar) main_lay.addWidget(MLabel("Menu Tab Widget (Huge)")) main_lay.addWidget(tool_bar_huge) main_lay.addWidget(MLabel("Menu Vertical Tab Widget (Huge)")) main_lay.addWidget(tool_bar_huge_v) self.setLayout(main_lay)
def _init_ui(self): main_lay = QVBoxLayout() tab_center = MLineTabWidget() tab_center.add_tab(MLabel('test 1 ' * 10), { 'text': u'Tab 1', 'svg': 'user_line.svg' }) tab_center.add_tab(MLabel('test 2 ' * 10), {'svg': 'calendar_line.svg'}) tab_center.add_tab(MLabel('test 3 ' * 10), u'Tab 3') tab_center.tool_button_group.set_dayu_checked(0) tab_left = MLineTabWidget(alignment=Qt.AlignLeft) tab_left.add_tab(MLabel('test 1 ' * 10), u'Tab 1') tab_left.add_tab(MLabel('test 2 ' * 10), u'Tab 2') tab_left.add_tab(MLabel('test 3 ' * 10), u'Tab 3') tab_left.tool_button_group.set_dayu_checked(0) tab_right = MLineTabWidget(alignment=Qt.AlignRight) tab_right.add_tab(MLabel('test 1 ' * 10), u'Tab 1') tab_right.add_tab(MLabel('test 2 ' * 10), u'Tab 2') tab_right.add_tab(MLabel('test 3 ' * 10), u'Tab 3') tab_right.tool_button_group.set_dayu_checked(0) main_lay.addWidget(MDivider('Center')) main_lay.addWidget(tab_center) main_lay.addSpacing(20) main_lay.addWidget(MDivider('Left')) main_lay.addWidget(tab_left) main_lay.addSpacing(20) main_lay.addWidget(MDivider('Right')) main_lay.addWidget(tab_right) main_lay.addStretch() self.setLayout(main_lay)
def slot_open_button(self): custom_widget = QWidget() custom_lay = QVBoxLayout() custom_lay.addWidget(MLabel('Some contents...')) custom_lay.addWidget(MLabel('Some contents...')) custom_lay.addWidget(MLabel('Some contents...')) custom_widget.setLayout(custom_lay) drawer = MDrawer('Basic Drawer', parent=self).left() drawer.setFixedWidth(200) drawer.set_widget(custom_widget) drawer.show()
def slot_open_button(self): custom_widget = QtWidgets.QWidget() custom_lay = QtWidgets.QVBoxLayout() custom_lay.addWidget(MLabel("Some contents...")) custom_lay.addWidget(MLabel("Some contents...")) custom_lay.addWidget(MLabel("Some contents...")) custom_widget.setLayout(custom_lay) drawer = MDrawer("Basic Drawer", parent=self).left() scale_x, _ = get_scale_factor() drawer.setFixedWidth(300 * scale_x) drawer.set_widget(custom_widget) drawer.show()
def __init__(self, title="", expand=False, widget=None, closable=False, parent=None): super(MSectionItem, self).__init__(parent) self._central_widget = None self.setAttribute(QtCore.Qt.WA_StyledBackground) self.title_label = MLabel(parent=self) self.expand_icon = MLabel(parent=self) self.expand_icon.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self._close_button = MToolButton().icon_only().tiny().svg( "close_line.svg") self._close_button.clicked.connect(self.close) header_lay = QtWidgets.QHBoxLayout() header_lay.addWidget(self.expand_icon) header_lay.addWidget(self.title_label) header_lay.addStretch() header_lay.addWidget(self._close_button) self.header_widget = QtWidgets.QWidget(parent=self) self.header_widget.setAttribute(QtCore.Qt.WA_StyledBackground) self.header_widget.setObjectName("title") self.header_widget.setLayout(header_lay) self.header_widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.header_widget.setCursor(QtCore.Qt.PointingHandCursor) self.title_label.setCursor(QtCore.Qt.PointingHandCursor) self.header_widget.installEventFilter(self) self.title_label.installEventFilter(self) self.content_widget = QtWidgets.QWidget(parent=self) self.content_layout = QtWidgets.QHBoxLayout() self.content_widget.setLayout(self.content_layout) self.main_lay = QtWidgets.QVBoxLayout() self.main_lay.setContentsMargins(0, 0, 0, 0) self.main_lay.setSpacing(0) self.main_lay.addWidget(self.header_widget) self.main_lay.addWidget(self.content_widget) self.setLayout(self.main_lay) self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.setMouseTracking(True) self.set_title(title) self.set_closable(closable) if widget: self.set_content(widget) self.set_expand(expand)
def slot_open_button_2(self): custom_widget = QWidget() custom_lay = QVBoxLayout() custom_lay.addWidget(MLabel('Some contents...')) custom_lay.addWidget(MLabel('Some contents...')) custom_lay.addWidget(MLabel('Some contents...')) custom_widget.setLayout(custom_lay) drawer = MDrawer('Basic Drawer', parent=self) drawer.set_dayu_position( self.button_grp.get_button_group().checkedButton().text()) drawer.setFixedWidth(200) drawer.set_widget(custom_widget) drawer.show()
def _init_ui(self): self.button_grp = MRadioButtonGroup() self.button_grp.set_button_list( ['top', { 'text': 'right', 'checked': True }, 'bottom', 'left']) open_button_2 = MPushButton('Open').primary() open_button_2.clicked.connect(self.slot_open_button_2) placement_lay = QHBoxLayout() placement_lay.addWidget(self.button_grp) placement_lay.addSpacing(20) placement_lay.addWidget(open_button_2) placement_lay.addStretch() new_account_button = MPushButton(text='New account', icon=MIcon('add_line.svg', '#fff')).primary() new_account_button.clicked.connect(self.slot_new_account) new_account_lay = QHBoxLayout() new_account_lay.addWidget(MLabel('Submit form in drawer')) new_account_lay.addWidget(new_account_button) new_account_lay.addStretch() main_lay = QVBoxLayout() main_lay.addWidget(MDivider('Custom Placement')) main_lay.addLayout(placement_lay) main_lay.addWidget(MDivider('Submit form in drawer')) main_lay.addLayout(new_account_lay) main_lay.addWidget(MDivider('Preview drawer')) self.setLayout(main_lay)
def _init_ui(self): scale_x, _ = get_scale_factor() self.button_grp = MRadioButtonGroup() self.button_grp.set_button_list( ["top", {"text": "right", "checked": True}, "bottom", "left"] ) open_button_2 = MPushButton("Open").primary() open_button_2.clicked.connect(self.slot_open_button_2) placement_lay = QtWidgets.QHBoxLayout() placement_lay.addWidget(self.button_grp) placement_lay.addSpacing(20 * scale_x) placement_lay.addWidget(open_button_2) placement_lay.addStretch() new_account_button = MPushButton( text="New account", icon=MIcon("add_line.svg", "#fff") ).primary() new_account_button.clicked.connect(self.slot_new_account) new_account_lay = QtWidgets.QHBoxLayout() new_account_lay.addWidget(MLabel("Submit form in drawer")) new_account_lay.addWidget(new_account_button) new_account_lay.addStretch() main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("Custom Placement")) main_lay.addLayout(placement_lay) main_lay.addWidget(MDivider("Submit form in drawer")) main_lay.addLayout(new_account_lay) main_lay.addWidget(MDivider("Preview drawer")) self.setLayout(main_lay)
def add_item(self, data_dict, index=None): """Add a item""" button = MToolButton() button.setText(data_dict.get("text")) if data_dict.get("svg"): button.svg(data_dict.get("svg")) if data_dict.get("tooltip"): button.setProperty("toolTip", data_dict.get("tooltip")) if data_dict.get("clicked"): button.clicked.connect(data_dict.get("clicked")) if data_dict.get("text"): if data_dict.get("svg") or data_dict.get("icon"): button.text_beside_icon() else: button.text_only() else: button.icon_only() if self._button_group.buttons(): separator = MLabel(self._separator).secondary() self._label_list.append(separator) self._main_layout.insertWidget(self._main_layout.count() - 1, separator) self._main_layout.insertWidget(self._main_layout.count() - 1, button) if index is None: self._button_group.addButton(button) else: self._button_group.addButton(button, index)
def _init_ui(self): check_box_1 = MSwitch() check_box_1.setChecked(True) check_box_2 = MSwitch() check_box_3 = MSwitch() check_box_3.setEnabled(False) lay = QHBoxLayout() lay.addWidget(check_box_1) lay.addWidget(check_box_2) lay.addWidget(check_box_3) size_lay = QVBoxLayout() size_list = [ ('Huge', MSwitch.huge), ('Large', MSwitch.large), ('Medium', MSwitch.medium), ('Small', MSwitch.small), ('Tiny', MSwitch.tiny), ] for label, cls in size_list: lay2 = QHBoxLayout() lay2.addWidget(MLabel(label)) lay2.addWidget(cls()) size_lay.addLayout(lay2) main_lay = QVBoxLayout() main_lay.addWidget(MDivider('Basic')) main_lay.addLayout(lay) main_lay.addWidget(MDivider('different size')) main_lay.addLayout(size_lay) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): button_config_list = [ {'text': 'Add', 'icon': MIcon('add_line.svg', '#fff'), 'type': MPushButton.PrimaryType}, {'text': 'Edit', 'icon': MIcon('edit_fill.svg', '#fff'), 'type': MPushButton.WarningType}, {'text': 'Delete', 'icon': MIcon('trash_line.svg', '#fff'), 'type': MPushButton.DangerType}, ] button_group_h = MPushButtonGroup() button_group_h.set_dayu_size(dayu_theme.large) button_group_h.set_button_list(button_config_list) h_lay = QHBoxLayout() h_lay.addWidget(button_group_h) h_lay.addStretch() button_group_v = MPushButtonGroup(orientation=Qt.Vertical) button_group_v.set_button_list(button_config_list) h_lay_2 = QHBoxLayout() h_lay_2.addWidget(button_group_v) h_lay_2.addStretch() main_lay = QVBoxLayout() main_lay.addWidget( MLabel(u'MPushButtonGroup is MPushButton collection. they are not exclusive.')) main_lay.addWidget(MDivider('MPushButton group: Horizontal & Small Size')) main_lay.addLayout(h_lay) main_lay.addWidget(MDivider('MPushButton group: Vertical & Default Size')) main_lay.addLayout(h_lay_2) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): button3 = MPushButton(text="Normal Message").primary() button4 = MPushButton(text="Success Message").success() button5 = MPushButton(text="Warning Message").warning() button6 = MPushButton(text="Error Message").danger() button3.clicked.connect( functools.partial(self.slot_show_message, MToast.info, {"text": "好像没啥用"})) button4.clicked.connect( functools.partial(self.slot_show_message, MToast.success, {"text": "领取成功"})) button5.clicked.connect( functools.partial(self.slot_show_message, MToast.warning, {"text": "暂不支持"})) button6.clicked.connect( functools.partial(self.slot_show_message, MToast.error, {"text": "支付失败,请重试"})) sub_lay1 = QtWidgets.QHBoxLayout() sub_lay1.addWidget(button3) sub_lay1.addWidget(button4) sub_lay1.addWidget(button5) sub_lay1.addWidget(button6) loading_button = MPushButton("Loading Toast").primary() loading_button.clicked.connect(self.slot_show_loading) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("different type")) main_lay.addLayout(sub_lay1) main_lay.addWidget(MLabel("不同的提示状态:成功、失败、加载中。默认2秒后消失")) main_lay.addWidget(loading_button) main_lay.addStretch() self.setLayout(main_lay)
def slot_open_button_2(self): custom_widget = QtWidgets.QWidget() custom_lay = QtWidgets.QVBoxLayout() custom_lay.addWidget(MLabel("Some contents...")) custom_lay.addWidget(MLabel("Some contents...")) custom_lay.addWidget(MLabel("Some contents...")) custom_widget.setLayout(custom_lay) drawer = MDrawer("Basic Drawer", parent=self) drawer.set_dayu_position( self.button_grp.get_button_group().checkedButton().text() ) scale_x, _ = get_scale_factor() drawer.setFixedWidth(300 * scale_x) drawer.set_widget(custom_widget) drawer.show()
def _init_ui(self): self.app_data = [{ 'text': 'Maya', 'icon': MIcon('app-maya.png') }, { 'text': 'Nuke', 'icon': MIcon('app-nuke.png') }, { 'text': 'Houdini', 'icon': MIcon('app-houdini.png') }] radio_group_h = MCheckBoxGroup() radio_group_v = MCheckBoxGroup(orientation=Qt.Vertical) radio_group_h.set_button_list(self.app_data) radio_group_v.set_button_list(self.app_data) self.data_list = [u'北京', u'上海', u'广州', u'深圳', u'郑州', u'石家庄'] radio_group_b = MCheckBoxGroup() radio_group_b.set_button_list(self.data_list) button = MPushButton(text='Change Value') button.clicked.connect(self.slot_button_clicked) label = MLabel() self.register_field('checked_app', [u'北京', u'郑州']) self.register_field('checked_app_text', lambda: u' & '.join(self.field('checked_app'))) self.bind('checked_app', radio_group_b, 'dayu_checked', signal='sig_checked_changed') self.bind('checked_app_text', label, 'text') radio_group_tri = MCheckBoxGroup() radio_group_tri.set_button_list(self.app_data) self.register_field('check_grp', [u'Maya']) self.bind('check_grp', radio_group_tri, 'dayu_checked', signal='sig_checked_changed') main_lay = QVBoxLayout() main_lay.addWidget(MDivider('Orientation Qt.Horizontal')) main_lay.addWidget(radio_group_h) main_lay.addWidget(MDivider('Orientation Qt.Vertical')) main_lay.addWidget(radio_group_v) main_lay.addWidget(MDivider('Data Bind')) main_lay.addWidget(radio_group_b) main_lay.addWidget(label) main_lay.addWidget(button) main_lay.addWidget(MDivider('Try Context Menu')) main_lay.addWidget(radio_group_tri) main_lay.addStretch() self.setLayout(main_lay)
class MColorPaletteDialog(QtWidgets.QDialog): def __init__(self, init_color, parent=None): super(MColorPaletteDialog, self).__init__(parent) self.setWindowTitle("DAYU Color Palette") self.primary_color = QtGui.QColor(init_color) self.color_chart = MColorChart() self.choose_color_button = QtWidgets.QPushButton() self.choose_color_button.setFixedSize(QtCore.QSize(100, 30)) self.color_label = QtWidgets.QLabel() self.info_label = MLabel() self.info_label.setProperty("error", True) color_lay = QtWidgets.QHBoxLayout() color_lay.addWidget(MLabel("Primary Color:")) color_lay.addWidget(self.choose_color_button) color_lay.addWidget(self.color_label) color_lay.addWidget(self.info_label) color_lay.addStretch() dialog = QtWidgets.QColorDialog(self.primary_color, parent=self) dialog.setWindowFlags(QtCore.Qt.Widget) dialog.setOption(QtWidgets.QColorDialog.NoButtons) dialog.currentColorChanged.connect(self.slot_color_changed) setting_lay = QtWidgets.QVBoxLayout() setting_lay.addLayout(color_lay) setting_lay.addWidget(MDivider()) setting_lay.addWidget(dialog) main_lay = QtWidgets.QHBoxLayout() main_lay.addWidget(self.color_chart) main_lay.addLayout(setting_lay) self.setLayout(main_lay) self.update_color() @QtCore.Slot(QtGui.QColor) def slot_color_changed(self, color): self.primary_color = color light = self.primary_color.lightness() saturation = self.primary_color.saturation() self.info_label.setText("") if light <= 70: self.info_label.setText("亮度建议不低于70(现在 {})".format(light)) if saturation <= 70: self.info_label.setText("饱和度建议不低于70(现在 {})".format(saturation)) self.update_color() def update_color(self): self.choose_color_button.setStyleSheet( "border-radius: 0;border: none;border:1px solid gray;" "background-color:{};".format(self.primary_color.name())) self.color_label.setText(self.primary_color.name()) self.color_chart.set_colors([ utils.generate_color(self.primary_color, index + 1) for index in range(10) ])
def _init_ui(self): standalone_lay = QHBoxLayout() standalone_lay.addWidget(MBadge.count(0)) standalone_lay.addWidget(MBadge.count(20)) standalone_lay.addWidget(MBadge.count(100)) standalone_lay.addWidget(MBadge.dot(True)) standalone_lay.addWidget(MBadge.text('new')) standalone_lay.addStretch() button = MToolButton().svg('trash_line.svg') avatar = MAvatar.large(MPixmap('avatar.png')) button_alert = MToolButton().svg('alert_fill.svg').large() badge_1 = MBadge.dot(True, widget=button) badge_2 = MBadge.dot(True, widget=avatar) badge_3 = MBadge.dot(True, widget=button_alert) button.clicked.connect(lambda: badge_1.set_dayu_dot(False)) spin_box = MSpinBox() spin_box.setRange(0, 9999) spin_box.valueChanged.connect(badge_3.set_dayu_count) spin_box.setValue(1) self.register_field('button1_selected', u'北京') menu1 = MMenu() menu1.set_data([u'北京', u'上海', u'广州', u'深圳']) select1 = MComboBox() select1.set_menu(menu1) self.bind('button1_selected', select1, 'value', signal='sig_value_changed') badge_hot = MBadge.text('hot', widget=MLabel(u'你的理想城市 ')) sub_lay1 = QHBoxLayout() sub_lay1.addWidget(badge_1) sub_lay1.addWidget(badge_2) sub_lay1.addWidget(badge_3) sub_lay1.addStretch() sub_lay2 = QHBoxLayout() sub_lay2.addWidget(badge_hot) sub_lay2.addWidget(select1) sub_lay2.addStretch() main_lay = QVBoxLayout() main_lay.addWidget(MDivider('use standalone')) main_lay.addLayout(standalone_lay) main_lay.addWidget(MDivider('different type')) main_lay.addLayout(sub_lay1) main_lay.addWidget(spin_box) main_lay.addWidget(MDivider('different type')) main_lay.addLayout(sub_lay2) main_lay.addStretch() self.setLayout(main_lay)
def __init__(self, parent=None): super(AlertExample, self).__init__(parent) self.setWindowTitle("Example for MAlert") main_lay = QtWidgets.QVBoxLayout() self.setLayout(main_lay) main_lay.addWidget(MDivider("different type")) main_lay.addWidget( MAlert(text="Information Message", parent=self).info()) main_lay.addWidget( MAlert(text="Success Message", parent=self).success()) main_lay.addWidget( MAlert(text="Warning Message", parent=self).warning()) main_lay.addWidget(MAlert(text="Error Message", parent=self).error()) closable_alert = MAlert("Some Message", parent=self).closable() main_lay.addWidget(MLabel("不同的提示信息类型")) main_lay.addWidget(MDivider("closable")) main_lay.addWidget(closable_alert) main_lay.addWidget(MDivider("data bind")) self.register_field("msg", "") self.register_field("msg_type", MAlert.InfoType) data_bind_alert = MAlert(parent=self) data_bind_alert.set_closable(True) self.bind("msg", data_bind_alert, "dayu_text") self.bind("msg_type", data_bind_alert, "dayu_type") button_grp = MPushButtonGroup() button_grp.set_button_list([ { "text": "error", "clicked": functools.partial(self.slot_change_alert, "password is wrong", MAlert.ErrorType), }, { "text": "success", "clicked": functools.partial(self.slot_change_alert, "login success", MAlert.SuccessType), }, { "text": "no more error", "clicked": functools.partial(self.slot_change_alert, "", MAlert.InfoType), }, ]) main_lay.addWidget(button_grp) main_lay.addWidget(data_bind_alert) main_lay.addStretch()