def _slot_context_menu(self, point): context_menu = MMenu(parent=self) logical_column = self.logicalIndexAt(point) model = utils.real_model(self.model()) if logical_column >= 0 and model.header_list[logical_column].get('checkable', False): action_select_all = context_menu.addAction(self.tr('Select All')) action_select_none = context_menu.addAction(self.tr('Select None')) action_select_invert = context_menu.addAction(self.tr('Select Invert')) self.connect(action_select_all, SIGNAL('triggered()'), functools.partial(self._slot_set_select, logical_column, Qt.Checked)) self.connect(action_select_none, SIGNAL('triggered()'), functools.partial(self._slot_set_select, logical_column, Qt.Unchecked)) self.connect(action_select_invert, SIGNAL('triggered()'), functools.partial(self._slot_set_select, logical_column, None)) context_menu.addSeparator() fit_action = context_menu.addAction(self.tr('Fit Size')) fit_action.triggered.connect(functools.partial(self._slot_set_resize_mode, True)) context_menu.addSeparator() for column in range(self.count()): action = context_menu.addAction(model.headerData(column, Qt.Horizontal, Qt.DisplayRole)) action.setCheckable(True) action.setChecked(not self.isSectionHidden(column)) action.toggled.connect(functools.partial(self._slot_set_section_visible, column)) context_menu.exec_(QCursor.pos() + QPoint(10, 10))
def _slot_context_menu(self, point): context_menu = MMenu(parent=self) action_select_all = context_menu.addAction('Select All') action_select_none = context_menu.addAction('Select None') action_select_invert = context_menu.addAction('Select Invert') action_select_all.triggered.connect(functools.partial(self._slot_set_select, True)) action_select_none.triggered.connect(functools.partial(self._slot_set_select, False)) action_select_invert.triggered.connect(functools.partial(self._slot_set_select, None)) context_menu.exec_(QCursor.pos() + QPoint(10, 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 createEditor(self, parent, option, index): self.parent_widget = parent self.editor = MMenu(exclusive=self.exclusive, parent=parent) self.editor.setWindowFlags(Qt.FramelessWindowHint | Qt.Window) model = utils.real_model(index) real_index = utils.real_index(index) data_obj = real_index.internalPointer() attr = '{}_list'.format(model.header_list[real_index.column()].get('key')) self.editor.set_data(utils.get_obj_value(data_obj, attr, [])) self.editor.sig_value_changed.connect(self._slot_finish_edit) return self.editor
def _init_ui(self): standalone_lay = QtWidgets.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", "北京") menu1 = MMenu(parent=self) menu1.set_data(["北京", "上海", "广州", "深圳"]) select1 = MComboBox() select1.set_menu(menu1) self.bind("button1_selected", select1, "value", signal="sig_value_changed") badge_hot = MBadge.text("hot", widget=MLabel("你的理想城市 ")) sub_lay1 = QtWidgets.QHBoxLayout() sub_lay1.addWidget(badge_1) sub_lay1.addWidget(badge_2) sub_lay1.addWidget(badge_3) sub_lay1.addStretch() sub_lay2 = QtWidgets.QHBoxLayout() sub_lay2.addWidget(badge_hot) sub_lay2.addWidget(select1) sub_lay2.addStretch() main_lay = QtWidgets.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(MPage, self).__init__(parent) self.register_field('page_size_selected', 25) self.register_field('page_size_list', [{'label': '25 - Fastest', 'value': 25}, {'label': '50 - Fast', 'value': 50}, {'label': '75 - Medium', 'value': 75}, {'label': '100 - Slow', 'value': 100}]) self.register_field('total', 0) self.register_field('current_page', 0) self.register_field('total_page', lambda: utils.get_total_page(self.field('total'), self.field('page_size_selected'))) self.register_field('total_page_text', lambda: str(self.field('total_page'))) self.register_field('display_text', lambda: utils.get_page_display_string(self.field('current_page'), self.field('page_size_selected'), self.field('total'))) self.register_field('can_pre', lambda: self.field('current_page') > 1) self.register_field('can_next', lambda: self.field('current_page') < self.field('total_page')) page_setting_menu = MMenu(parent=self) self._display_label = MLabel() self._display_label.setAlignment(Qt.AlignCenter) self._change_page_size_button = MComboBox().small() self._change_page_size_button.setFixedWidth(110) self._change_page_size_button.set_menu(page_setting_menu) self._change_page_size_button.set_formatter(lambda x: u'{} per page'.format(x)) self._change_page_size_button.sig_value_changed.connect(self._emit_page_changed) self._pre_button = MToolButton().icon_only().svg('left_fill.svg').small() self._pre_button.clicked.connect(functools.partial(self._slot_change_current_page, -1)) self._next_button = MToolButton().small().icon_only().svg('right_fill.svg') self._next_button.clicked.connect(functools.partial(self._slot_change_current_page, 1)) self._current_page_spin_box = MSpinBox() self._current_page_spin_box.setMinimum(1) self._current_page_spin_box.set_dayu_size(dayu_theme.small) self._current_page_spin_box.valueChanged.connect(self._emit_page_changed) self._total_page_label = MLabel() self.bind('page_size_list', page_setting_menu, 'data') self.bind('page_size_selected', page_setting_menu, 'value', signal='sig_value_changed') self.bind('page_size_selected', self._change_page_size_button, 'value', signal='sig_value_changed') self.bind('current_page', self._current_page_spin_box, 'value', signal='valueChanged') self.bind('total_page', self._current_page_spin_box, 'maximum') self.bind('total_page_text', self._total_page_label, 'dayu_text') self.bind('display_text', self._display_label, 'dayu_text') self.bind('can_pre', self._pre_button, 'enabled') self.bind('can_next', self._next_button, 'enabled') main_lay = QHBoxLayout() main_lay.setContentsMargins(0, 0, 0, 0) main_lay.setSpacing(2) main_lay.addStretch() main_lay.addWidget(self._display_label) main_lay.addStretch() main_lay.addWidget(MLabel('|').secondary()) main_lay.addWidget(self._change_page_size_button) main_lay.addWidget(MLabel('|').secondary()) main_lay.addWidget(self._pre_button) main_lay.addWidget(MLabel('Page')) main_lay.addWidget(self._current_page_spin_box) main_lay.addWidget(MLabel('/')) main_lay.addWidget(self._total_page_label) main_lay.addWidget(self._next_button) self.setLayout(main_lay)
def _init_ui(self): size_lay = QtWidgets.QHBoxLayout() line_edit_l = MLineEdit().large() line_edit_l.setPlaceholderText("large size") line_edit_m = MLineEdit().medium() line_edit_m.setPlaceholderText("default size") line_edit_s = MLineEdit().small() line_edit_s.setPlaceholderText("small size") size_lay.addWidget(line_edit_l) size_lay.addWidget(line_edit_m) size_lay.addWidget(line_edit_s) line_edit_tool_button = MLineEdit(text="MToolButton") line_edit_tool_button.set_prefix_widget( MToolButton().svg("user_line.svg").icon_only() ) line_edit_label = MLineEdit(text="MLabel") tool_button = MLabel(text="User").mark().secondary() tool_button.setAlignment(QtCore.Qt.AlignCenter) tool_button.setFixedWidth(80) line_edit_label.set_prefix_widget(tool_button) line_edit_push_button = MLineEdit(text="MPushButton") push_button = MPushButton(text="Go").primary() push_button.setFixedWidth(40) line_edit_push_button.set_suffix_widget(push_button) search_engine_line_edit = MLineEdit().search_engine().large() search_engine_line_edit.returnPressed.connect(self.slot_search) line_edit_options = MLineEdit() combobox = MComboBox() option_menu = MMenu() option_menu.set_separator("|") option_menu.set_data([r"http://", r"https://"]) combobox.set_menu(option_menu) combobox.set_value("http://") combobox.setFixedWidth(100) line_edit_options.set_prefix_widget(combobox) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("different size")) main_lay.addLayout(size_lay) main_lay.addWidget(MDivider("custom prefix and suffix widget")) main_lay.addWidget(line_edit_tool_button) main_lay.addWidget(line_edit_label) main_lay.addWidget(line_edit_push_button) main_lay.addWidget(MDivider("preset")) main_lay.addWidget(MLabel("error")) main_lay.addWidget( MLineEdit(text="waring: file d:/ddd/ccc.jpg not exists.").error() ) main_lay.addWidget(MLabel("search")) main_lay.addWidget(MLineEdit().search().small()) main_lay.addWidget(MLabel("search_engine")) main_lay.addWidget(search_engine_line_edit) main_lay.addWidget(MLabel("file")) main_lay.addWidget(MLineEdit().file().small()) main_lay.addWidget(MLabel("folder")) main_lay.addWidget(MLineEdit().folder().small()) main_lay.addWidget(MLabel("MLineEdit.options()")) main_lay.addWidget(line_edit_options) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): self.register_field('button1_selected', u'北京') menu1 = MMenu() menu1.set_data([u'北京', u'上海', u'广州', u'深圳']) size_list = [('Large', dayu_theme.large), ('Medium', dayu_theme.medium), ('Small', dayu_theme.small)] size_lay = QHBoxLayout() for label, size in size_list: combo_box = MComboBox() combo_box.set_dayu_size(size) combo_box.set_menu(menu1) size_lay.addWidget(combo_box) self.bind('button1_selected', combo_box, 'value', signal='sig_value_changed') self.register_field('button2_selected', [u'北京']) menu2 = MMenu(exclusive=False) menu2.set_data([u'北京', u'上海', u'广州', u'深圳']) select2 = MComboBox() select2.set_menu(menu2) self.bind('button2_selected', select2, 'value', signal='sig_value_changed') def dynamic_get_city(): data = [u'北京', u'上海', u'广州', u'深圳', u'郑州', u'石家庄'] start = random.randint(0, len(data)) end = random.randint(start, len(data)) return data[start:end] self.register_field('button3_selected', '') menu3 = MMenu() menu3.set_load_callback(dynamic_get_city) select3 = MComboBox() select3.set_menu(menu3) self.bind('button3_selected', select3, 'value', signal='sig_value_changed') a = [{ 'children': [{ 'value': u'\u6545\u5bab', 'label': u'\u6545\u5bab' }, { 'value': u'\u5929\u575b', 'label': u'\u5929\u575b' }, { 'value': u'\u738b\u5e9c\u4e95', 'label': u'\u738b\u5e9c\u4e95' }], 'value': u'\u5317\u4eac', 'label': u'\u5317\u4eac' }, { 'children': [{ 'children': [{ 'value': u'\u592b\u5b50\u5e99', 'label': u'\u592b\u5b50\u5e99' }], 'value': u'\u5357\u4eac', 'label': u'\u5357\u4eac' }, { 'children': [{ 'value': u'\u62d9\u653f\u56ed', 'label': u'\u62d9\u653f\u56ed' }, { 'value': u'\u72ee\u5b50\u6797', 'label': u'\u72ee\u5b50\u6797' }], 'value': u'\u82cf\u5dde', 'label': u'\u82cf\u5dde' }], 'value': u'\u6c5f\u82cf', 'label': u'\u6c5f\u82cf' }] self.register_field('button4_selected', '') menu4 = MMenu(cascader=True) menu4.set_data(a) select4 = MComboBox() select4.set_menu(menu4) select4.set_formatter(lambda x: ' / '.join(x)) self.bind('button4_selected', select4, 'value', signal='sig_value_changed') self.register_field('button5_selected', '') menu5 = MMenu(exclusive=False) menu5.set_data([u'北京', u'上海', u'广州', u'深圳']) select5 = MComboBox() select5.set_menu(menu5) select5.set_formatter(lambda x: ' & '.join(x)) self.bind('button5_selected', select5, 'value', signal='sig_value_changed') sub_lay1 = QHBoxLayout() sub_lay1.addWidget(MLabel(u'普通单选各种尺寸')) sub_lay1.addLayout(size_lay) sub_lay1.addStretch() sub_lay2 = QHBoxLayout() sub_lay2.addWidget(MLabel(u'多选')) sub_lay2.addWidget(select2) sub_lay2.addStretch() sub_lay3 = QHBoxLayout() sub_lay3.addWidget(MLabel(u'动态生成选项')) sub_lay3.addWidget(select3) sub_lay3.addStretch() sub_lay4 = QHBoxLayout() sub_lay4.addWidget(MLabel(u'级联选择')) sub_lay4.addWidget(select4) sub_lay4.addStretch() sub_lay5 = QHBoxLayout() sub_lay5.addWidget(MLabel(u'自定义显示')) sub_lay5.addWidget(select5) sub_lay5.addStretch() main_lay = QVBoxLayout() main_lay.addWidget(MDivider(u'Select')) main_lay.addLayout(sub_lay1) main_lay.addLayout(sub_lay2) main_lay.addLayout(sub_lay3) main_lay.addWidget(MDivider(u'自定义格式')) main_lay.addLayout(sub_lay4) main_lay.addLayout(sub_lay5) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): self.register_field('button1_selected', u'北京') self.register_field('button1_selected_text', lambda: self.field('button1_selected')) button1 = MPushButton(text='Normal Menu') menu1 = MMenu(parent=self) menu1.set_data([u'北京', u'上海', u'广州', u'深圳']) button1.setMenu(menu1) button1.clicked.connect(button1.showMenu) label1 = MLabel() self.bind('button1_selected', menu1, 'value', signal='sig_value_changed') self.bind('button1_selected_text', label1, 'text') self.register_field('button2_selected', [u'北京']) self.register_field('button2_selected_text', lambda: ', '.join(self.field('button2_selected'))) button2 = MPushButton(text='Multi Select Menu') menu2 = MMenu(exclusive=False, parent=self) menu2.set_data([u'北京', u'上海', u'广州', u'深圳']) button2.setMenu(menu2) button2.clicked.connect(button2.showMenu) label2 = MLabel() self.bind('button2_selected', menu2, 'value', signal='sig_value_changed') self.bind('button2_selected_text', label2, 'text') self.register_field('button3_selected', '') self.register_field('button3_selected_text', lambda: self.field('button3_selected')) button3 = MPushButton(text=u'回调函数获取选项') menu3 = MMenu(parent=self) menu3.set_load_callback(lambda: [u'北京', u'上海', u'广州', u'深圳']) button3.setMenu(menu3) button3.clicked.connect(button2.showMenu) label3 = MLabel() self.bind('button3_selected', menu3, 'value', signal='sig_value_changed') self.bind('button3_selected_text', label3, 'text') self.register_field('button4_selected', '') self.register_field('button4_selected_text', lambda: ' / '.join(self.field('button4_selected'))) button4 = MPushButton(text=u'级联选择') menu4 = MMenu(cascader=True, parent=self) menu4.set_data([u'北京/故宫', u'北京/天坛', u'北京/王府井', u'江苏/南京/夫子庙', u'江苏/苏州/拙政园', u'江苏/苏州/狮子林']) button4.setMenu(menu4) button4.clicked.connect(button4.showMenu) label4 = MLabel() self.bind('button4_selected', menu4, 'value', signal='sig_value_changed') self.bind('button4_selected_text', label4, 'text') a = [{'children': [{'value': u'\u6545\u5bab', 'label': u'\u6545\u5bab'}, {'value': u'\u5929\u575b', 'label': u'\u5929\u575b'}, {'value': u'\u738b\u5e9c\u4e95', 'label': u'\u738b\u5e9c\u4e95'}], 'value': u'\u5317\u4eac', 'label': u'\u5317\u4eac'}, {'children': [{'children': [{'value': u'\u592b\u5b50\u5e99', 'label': u'\u592b\u5b50\u5e99'}], 'value': u'\u5357\u4eac', 'label': u'\u5357\u4eac'}, {'children': [{'value': u'\u62d9\u653f\u56ed', 'label': u'\u62d9\u653f\u56ed'}, {'value': u'\u72ee\u5b50\u6797', 'label': u'\u72ee\u5b50\u6797'}], 'value': u'\u82cf\u5dde', 'label': u'\u82cf\u5dde'}], 'value': u'\u6c5f\u82cf', 'label': u'\u6c5f\u82cf'}] sub_lay1 = QHBoxLayout() sub_lay1.addWidget(button1) sub_lay1.addWidget(label1) sub_lay2 = QHBoxLayout() sub_lay2.addWidget(button2) sub_lay2.addWidget(label2) sub_lay3 = QHBoxLayout() sub_lay3.addWidget(button3) sub_lay3.addWidget(label3) sub_lay4 = QHBoxLayout() sub_lay4.addWidget(button4) sub_lay4.addWidget(label4) main_lay = QVBoxLayout() main_lay.addWidget(MDivider(u'Select')) main_lay.addLayout(sub_lay1) main_lay.addLayout(sub_lay2) main_lay.addLayout(sub_lay3) main_lay.addWidget(MDivider(u'级联选择')) main_lay.addLayout(sub_lay4) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): self.register_field("button1_selected", "北京") self.register_field("button1_selected_text", lambda: self.field("button1_selected")) button1 = MPushButton(text="Normal Menu") menu1 = MMenu(parent=self) menu1.set_data(["北京", "上海", "广州", "深圳"]) button1.setMenu(menu1) button1.clicked.connect(button1.showMenu) label1 = MLabel() self.bind("button1_selected", menu1, "value", signal="sig_value_changed") self.bind("button1_selected_text", label1, "text") self.register_field("button2_selected", ["北京"]) self.register_field("button2_selected_text", lambda: ", ".join(self.field("button2_selected"))) button2 = MPushButton(text="Multi Select Menu") menu2 = MMenu(exclusive=False, parent=self) menu2.set_data(["北京", "上海", "广州", "深圳"]) button2.setMenu(menu2) button2.clicked.connect(button2.showMenu) label2 = MLabel() self.bind("button2_selected", menu2, "value", signal="sig_value_changed") self.bind("button2_selected_text", label2, "text") self.register_field("button3_selected", "") self.register_field("button3_selected_text", lambda: self.field("button3_selected")) button3 = MPushButton(text="回调函数获取选项") menu3 = MMenu(parent=self) menu3.set_load_callback(lambda: ["北京", "上海", "广州", "深圳"]) button3.setMenu(menu3) button3.clicked.connect(button2.showMenu) label3 = MLabel() self.bind("button3_selected", menu3, "value", signal="sig_value_changed") self.bind("button3_selected_text", label3, "text") self.register_field("button4_selected", "") self.register_field("button4_selected_text", lambda: " / ".join(self.field("button4_selected"))) button4 = MPushButton(text="级联选择") menu4 = MMenu(cascader=True, parent=self) menu4.set_data([ "北京/故宫", "北京/天坛", "北京/王府井", "江苏/南京/夫子庙", "江苏/苏州/拙政园", "江苏/苏州/狮子林" ]) button4.setMenu(menu4) button4.clicked.connect(button4.showMenu) label4 = MLabel() self.bind("button4_selected", menu4, "value", signal="sig_value_changed") self.bind("button4_selected_text", label4, "text") sub_lay1 = QtWidgets.QHBoxLayout() sub_lay1.addWidget(button1) sub_lay1.addWidget(label1) sub_lay2 = QtWidgets.QHBoxLayout() sub_lay2.addWidget(button2) sub_lay2.addWidget(label2) sub_lay3 = QtWidgets.QHBoxLayout() sub_lay3.addWidget(button3) sub_lay3.addWidget(label3) sub_lay4 = QtWidgets.QHBoxLayout() sub_lay4.addWidget(button4) sub_lay4.addWidget(label4) sub_lay5 = QtWidgets.QHBoxLayout() button = MPushButton(text="滚动菜单") menu = MMenu(parent=self) items = [ "北京", "上海", "广州", "深圳", "北戴河", "BBC/data", "BBC/hello", "American" ] menu.set_data(items) menu.setProperty("max_scroll_count", 3) menu.setProperty("scrollable", True) menu.setProperty("searchable", True) button.setMenu(menu) sub_lay5.addWidget(button) sub_lay6 = QtWidgets.QHBoxLayout() button = MPushButton(text="搜索菜单") menu = MMenu(parent=self) items = ["北京", "上海", "广州", "深圳", "北戴河"] for item in items: menu.addAction(item) sub_menu = MMenu(parent=self, title="BBC") for item in ["data", "hello"]: _menu = MMenu(parent=self, title=item) _menu.addAction("tencent") _menu.addAction("baidu") _menu.addAction("google") _menu.setProperty("searchable", True) sub_menu.addMenu(_menu) menu.addMenu(sub_menu) menu.setProperty("searchable", True) button.setMenu(menu) sub_lay6.addWidget(button) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("Select")) main_lay.addLayout(sub_lay1) main_lay.addLayout(sub_lay2) main_lay.addLayout(sub_lay3) main_lay.addWidget(MDivider("级联选择")) main_lay.addLayout(sub_lay4) main_lay.addLayout(sub_lay5) main_lay.addLayout(sub_lay6) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): size_lay = QHBoxLayout() line_edit_l = MLineEdit().large() line_edit_l.setPlaceholderText('large size') line_edit_m = MLineEdit().medium() line_edit_m.setPlaceholderText('default size') line_edit_s = MLineEdit().small() line_edit_s.setPlaceholderText('small size') size_lay.addWidget(line_edit_l) size_lay.addWidget(line_edit_m) size_lay.addWidget(line_edit_s) line_edit_tool_button = MLineEdit(text='MToolButton') line_edit_tool_button.set_prefix_widget( MToolButton().svg('user_line.svg').icon_only()) line_edit_label = MLineEdit(text='MLabel') tool_button = MLabel(text='User').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) line_edit_label.set_prefix_widget(tool_button) line_edit_push_button = MLineEdit(text='MPushButton') push_button = MPushButton(text='Go').primary() push_button.setFixedWidth(40) line_edit_push_button.set_suffix_widget(push_button) search_engine_line_edit = MLineEdit().search_engine().large() search_engine_line_edit.returnPressed.connect(self.slot_search) line_edit_options = MLineEdit() combobox = MComboBox() option_menu = MMenu() option_menu.set_separator('|') option_menu.set_data([r'http://', r'https://']) combobox.set_menu(option_menu) combobox.set_value('http://') combobox.setFixedWidth(90) line_edit_options.set_prefix_widget(combobox) main_lay = QVBoxLayout() main_lay.addWidget(MDivider('different size')) main_lay.addLayout(size_lay) main_lay.addWidget(MDivider('custom prefix and suffix widget')) main_lay.addWidget(line_edit_tool_button) main_lay.addWidget(line_edit_label) main_lay.addWidget(line_edit_push_button) main_lay.addWidget(MDivider('preset')) main_lay.addWidget(MLabel('error')) main_lay.addWidget( MLineEdit(text='waring: file d:/ddd/ccc.jpg not exists.').error()) main_lay.addWidget(MLabel('search')) main_lay.addWidget(MLineEdit().search().small()) main_lay.addWidget(MLabel('search_engine')) main_lay.addWidget(search_engine_line_edit) main_lay.addWidget(MLabel('file')) main_lay.addWidget(MLineEdit().file().small()) main_lay.addWidget(MLabel('folder')) main_lay.addWidget(MLineEdit().folder().small()) main_lay.addWidget(MLabel('MLineEdit.options()')) main_lay.addWidget(line_edit_options) main_lay.addStretch() self.setLayout(main_lay)
def _init_ui(self): cities = ["北京", "上海", "广州", "深圳"] self.register_field("button1_selected", "北京") menu1 = MMenu(parent=self) menu1.set_data(cities) size_list = [ ("Large", dayu_theme.large), ("Medium", dayu_theme.medium), ("Small", dayu_theme.small), ] size_lay = QtWidgets.QHBoxLayout() for label, size in size_list: combo_box = MComboBox() combo_box.set_dayu_size(size) combo_box.set_menu(menu1) size_lay.addWidget(combo_box) self.bind("button1_selected", combo_box, "value", signal="sig_value_changed") self.register_field("button2_selected", ["北京"]) menu2 = MMenu(exclusive=False, parent=self) menu2.set_data(cities) select2 = MComboBox() select2.set_menu(menu2) self.bind("button2_selected", select2, "value", signal="sig_value_changed") def dynamic_get_city(): data = cities + ["郑州", "石家庄"] start = random.randint(0, len(data)) end = random.randint(start, len(data)) return data[start:end] self.register_field("button3_selected", "") menu3 = MMenu(parent=self) menu3.set_load_callback(dynamic_get_city) select3 = MComboBox() select3.set_menu(menu3) self.bind("button3_selected", select3, "value", signal="sig_value_changed") a = [ { "children": [ { "value": "\u6545\u5bab", "label": "\u6545\u5bab" }, { "value": "\u5929\u575b", "label": "\u5929\u575b" }, { "value": "\u738b\u5e9c\u4e95", "label": "\u738b\u5e9c\u4e95" }, ], "value": "\u5317\u4eac", "label": "\u5317\u4eac", }, { "children": [ { "children": [{ "value": "\u592b\u5b50\u5e99", "label": "\u592b\u5b50\u5e99", }], "value": "\u5357\u4eac", "label": "\u5357\u4eac", }, { "children": [ { "value": "\u62d9\u653f\u56ed", "label": "\u62d9\u653f\u56ed", }, { "value": "\u72ee\u5b50\u6797", "label": "\u72ee\u5b50\u6797", }, ], "value": "\u82cf\u5dde", "label": "\u82cf\u5dde", }, ], "value": "\u6c5f\u82cf", "label": "\u6c5f\u82cf", }, ] self.register_field("button4_selected", "") menu4 = MMenu(cascader=True, parent=self) menu4.set_data(a) select4 = MComboBox() select4.set_menu(menu4) select4.set_formatter(lambda x: " / ".join(x)) self.bind("button4_selected", select4, "value", signal="sig_value_changed") self.register_field("button5_selected", "") menu5 = MMenu(exclusive=False, parent=self) menu5.set_data(cities) select5 = MComboBox() select5.set_menu(menu5) select5.set_formatter(lambda x: " & ".join(x)) self.bind("button5_selected", select5, "value", signal="sig_value_changed") sub_lay1 = QtWidgets.QHBoxLayout() sub_lay1.addWidget(MLabel("普通单选各种尺寸")) sub_lay1.addLayout(size_lay) sub_lay1.addStretch() sub_lay2 = QtWidgets.QHBoxLayout() sub_lay2.addWidget(MLabel("多选")) sub_lay2.addWidget(select2) sub_lay2.addStretch() sub_lay3 = QtWidgets.QHBoxLayout() sub_lay3.addWidget(MLabel("动态生成选项")) sub_lay3.addWidget(select3) sub_lay3.addStretch() sub_lay4 = QtWidgets.QHBoxLayout() sub_lay4.addWidget(MLabel("级联选择")) sub_lay4.addWidget(select4) sub_lay4.addStretch() sub_lay5 = QtWidgets.QHBoxLayout() sub_lay5.addWidget(MLabel("自定义显示")) sub_lay5.addWidget(select5) sub_lay5.addStretch() sub_lay6 = QtWidgets.QHBoxLayout() combo = MComboBox() items = cities + ["北戴河"] items += ["a" * i for i in range(20)] combo.addItems(items) combo.setProperty("searchable", True) sub_lay6.addWidget(MLabel("搜索补全")) sub_lay6.addWidget(combo) main_lay = QtWidgets.QVBoxLayout() main_lay.addWidget(MDivider("Select")) main_lay.addLayout(sub_lay1) main_lay.addLayout(sub_lay2) main_lay.addLayout(sub_lay3) main_lay.addWidget(MDivider("自定义格式")) main_lay.addLayout(sub_lay4) main_lay.addLayout(sub_lay5) main_lay.addLayout(sub_lay6) main_lay.addStretch() self.setLayout(main_lay)
def __init__(self, parent=None): super(MPage, self).__init__(parent) self.register_field("page_size_selected", 25) self.register_field( "page_size_list", [ { "label": "25 - Fastest", "value": 25 }, { "label": "50 - Fast", "value": 50 }, { "label": "75 - Medium", "value": 75 }, { "label": "100 - Slow", "value": 100 }, ], ) self.register_field("total", 0) self.register_field("current_page", 0) self.register_field( "total_page", lambda: utils.get_total_page(self.field("total"), self.field("page_size_selected")), ) self.register_field("total_page_text", lambda: str(self.field("total_page"))) self.register_field( "display_text", lambda: utils.get_page_display_string( self.field("current_page"), self.field("page_size_selected"), self.field("total"), ), ) self.register_field("can_pre", lambda: self.field("current_page") > 1) self.register_field( "can_next", lambda: self.field("current_page") < self.field("total_page")) page_setting_menu = MMenu(parent=self) self._display_label = MLabel() self._display_label.setAlignment(QtCore.Qt.AlignCenter) self._change_page_size_button = MComboBox().small() self._change_page_size_button.set_menu(page_setting_menu) self._change_page_size_button.set_formatter( lambda x: "{} per page".format(x)) self._change_page_size_button.sig_value_changed.connect( self._emit_page_changed) self._pre_button = MToolButton().icon_only().svg( "left_fill.svg").small() self._pre_button.clicked.connect( functools.partial(self._slot_change_current_page, -1)) self._next_button = MToolButton().small().icon_only().svg( "right_fill.svg") self._next_button.clicked.connect( functools.partial(self._slot_change_current_page, 1)) self._current_page_spin_box = MSpinBox() self._current_page_spin_box.setMinimum(1) self._current_page_spin_box.set_dayu_size(dayu_theme.small) self._current_page_spin_box.valueChanged.connect( self._emit_page_changed) self._total_page_label = MLabel() self.bind("page_size_list", page_setting_menu, "data") self.bind("page_size_selected", page_setting_menu, "value", signal="sig_value_changed") self.bind( "page_size_selected", self._change_page_size_button, "value", signal="sig_value_changed", ) self.bind("current_page", self._current_page_spin_box, "value", signal="valueChanged") self.bind("total_page", self._current_page_spin_box, "maximum") self.bind("total_page_text", self._total_page_label, "dayu_text") self.bind("display_text", self._display_label, "dayu_text") self.bind("can_pre", self._pre_button, "enabled") self.bind("can_next", self._next_button, "enabled") main_lay = QtWidgets.QHBoxLayout() main_lay.setContentsMargins(0, 0, 0, 0) main_lay.setSpacing(2) main_lay.addStretch() main_lay.addWidget(self._display_label) main_lay.addStretch() main_lay.addWidget(MLabel("|").secondary()) main_lay.addWidget(self._change_page_size_button) main_lay.addWidget(MLabel("|").secondary()) main_lay.addWidget(self._pre_button) main_lay.addWidget(MLabel("Page")) main_lay.addWidget(self._current_page_spin_box) main_lay.addWidget(MLabel("/")) main_lay.addWidget(self._total_page_label) main_lay.addWidget(self._next_button) self.setLayout(main_lay)