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_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)
class MOptionDelegate(QStyledItemDelegate): def __init__(self, parent=None): super(MOptionDelegate, self).__init__(parent) self.editor = None self.showed = False self.exclusive = True self.parent_widget = None self.arrow_space = 20 self.arrow_height = 6 def set_exclusive(self, flag): self.exclusive = flag 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 setEditorData(self, editor, index): editor.set_value(index.data(Qt.EditRole)) def setModelData(self, editor, model, index): model.setData(index, editor.property('value')) def updateEditorGeometry(self, editor, option, index): editor.move( self.parent_widget.mapToGlobal( QPoint(option.rect.x(), option.rect.y() + option.rect.height()))) def paint(self, painter, option, index): painter.save() icon_color = dayu_theme.icon_color if option.state & QStyle.State_MouseOver: painter.fillRect(option.rect, QColor(dayu_theme.primary_5)) icon_color = '#fff' if option.state & QStyle.State_Selected: painter.fillRect(option.rect, QColor(dayu_theme.primary_6)) icon_color = '#fff' painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(Qt.white)) pix = MPixmap('down_fill.svg', icon_color) h = option.rect.height() pix = pix.scaledToWidth(h * 0.5, Qt.SmoothTransformation) painter.drawPixmap(option.rect.x() + option.rect.width() - h, option.rect.y() + h / 4, pix) painter.restore() super(MOptionDelegate, self).paint(painter, option, index) @Slot(object) def _slot_finish_edit(self, obj): self.commitData.emit(self.editor) def sizeHint(self, option, index): orig = super(MOptionDelegate, self).sizeHint(option, index) return QSize(orig.width() + self.arrow_space, orig.height())
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)