def addDrawer(self, type, name, path): if (self.userName == None): self.slot_show_message(MMessage.warning, u"请先登录账号") return self.parmerPanel = Parmers.ParmerPanel(self.userName) self.parmerPanel.setParam(type, name, path) self.parmerPanel.send_message_signal.connect(self.setMessageBox) self.custom_widget = QWidget() custom_lay = QFormLayout() self.custom_widget.setLayout(custom_lay) custom_lay.setContentsMargins(0, 0, 0, 0) custom_lay.addWidget(self.parmerPanel) self.drawer = MDrawer(u'参数面板', parent=self.view.centerWindow) self.drawer.layout().setContentsMargins(0, 0, 0, 0) self.drawer.setFixedWidth(Data.getWindowWidth() / 3) self.drawer.set_widget(self.custom_widget) # self.drawer.layout().addWidget(self.custom_widget) dayu_theme.apply(self.drawer) self.drawer.show() # self.parmerPanel.model_widget.setMinimumSize(Data.getWindowHeight()/3,Data.getWindowHeight()/3) # self.view.centerWindow.layout().addWidget(self.parmerPanel.model_widget) self.parmerPanel.model_widget.embed() self.parmerPanel.setModelWidget(path) #设置3d视图
def setHeadPortrait(self, username, QWidget): path = file_path + r"\res\headPortrial\default.jpg" nameList = os.listdir(file_path + r"\res\headPortrial") for name in nameList: if (username + ".jpg") == name: path = file_path + r"\res\headPortrial" + "\\" + username + ".jpg" pixmap = QtGui.QPixmap(path) QWidget.setPixmap(pixmap)
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_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 slot_new_account(self): custom_widget = QWidget() custom_lay = QFormLayout() custom_lay.addRow('Name', MLineEdit()) custom_lay.addRow('Age', MSpinBox()) custom_lay.addRow('Birth', MDateEdit()) custom_widget.setLayout(custom_lay) drawer = MDrawer('New account', parent=self) submit_button = MPushButton('Submit').primary() submit_button.clicked.connect(drawer.close) drawer.add_button(MPushButton('Cancel')) drawer.add_button(submit_button) drawer.setFixedWidth(200) drawer.set_widget(custom_widget) drawer.show()
def login(self, name): self.widget = QWidget() self.widget.setMinimumSize(Data.getWindowWidth() / 6, Data.getWindowHeight() / 4) # 加载ui,并设置ui界面 #self.ui = loadUi(file_path + "\\res\\UI\\LoginIn.ui") self.ui = loadUi(file_path + "\\res\\UI\\LoginIn.ui") self.ui.setParent(self.widget) self.widget.setLayout(QVBoxLayout()) # 设置布局 self.widget.layout().addWidget(self.ui) self.setWidget(self.widget) # 获取控件 self.label_name = self.ui.findChild(QLabel, "label_name") self.label_identity = self.ui.findChild(QLabel, "label_identity") self.label_headLogin = self.ui.findChild(QLabel, "label_headLogin") self.btn_editUser = self.ui.findChild(QPushButton, "btn_editUser") # 链接信号与槽函数 self.btn_editUser.clicked.connect(lambda: self.editUser(name)) #saveLoginTime(name) # 储存登陆时间 # Todo 根据名字访问数据库里的信息,加载到界面 self.label_name.setText(name) # 显示用户名 colUser = userdb[name] for x in colUser.find({"_id": "UserID"}, {"UserID": 1}): ID = x["UserID"] self.label_identity.setText(ID) # 显示身份 # 设置头像 self.setHeadPortrait(name, self.label_headLogin) #设置操作记录 self.Userlogin_signal.emit()
def __init__(self, parent=None): super(RadioButtonExample, self).__init__(parent) self.setWindowTitle('Example for MRadioButton') widget_1 = QWidget() lay_1 = QHBoxLayout() lay_1.addWidget(MRadioButton('Maya')) lay_1.addWidget(MRadioButton('Nuke')) lay_1.addWidget(MRadioButton('Houdini')) widget_1.setLayout(lay_1) check_box_icon_1 = MRadioButton('Folder') check_box_icon_1.setIcon(MIcon('folder_fill.svg')) check_box_icon_2 = MRadioButton('Media') check_box_icon_2.setIcon(MIcon('media_fill.svg')) check_box_icon_3 = MRadioButton('User') check_box_icon_3.setIcon(MIcon('user_fill.svg')) check_box_icon_2.setChecked(True) widget_2 = QWidget() lay_2 = QHBoxLayout() lay_2.addWidget(check_box_icon_1) lay_2.addWidget(check_box_icon_2) lay_2.addWidget(check_box_icon_3) widget_2.setLayout(lay_2) check_box_single = MRadioButton(u'支付宝') check_box_single.setChecked(True) check_box_single.setEnabled(False) check_box_bind = MRadioButton('Data Bind') label = MLabel() button = MPushButton(text='Change State') button.clicked.connect( lambda: self.set_field('checked', not self.field('checked'))) self.register_field('checked', True) self.register_field( 'checked_text', lambda: 'Yes!' if self.field('checked') else 'No!!') self.bind('checked', check_box_bind, 'checked', signal='toggled') self.bind('checked_text', label, 'text') main_lay = QVBoxLayout() main_lay.addWidget(MDivider('Basic')) main_lay.addWidget(widget_1) main_lay.addWidget(check_box_single) main_lay.addWidget(MDivider('Icon')) main_lay.addWidget(widget_2) main_lay.addWidget(MDivider('Data Bind')) main_lay.addWidget(check_box_bind) main_lay.addWidget(label) main_lay.addWidget(button) main_lay.addStretch() self.setLayout(main_lay)
def test_divider_class_method(qtbot, text, visible_text): """Test MDivider class methods.""" main_widget = QWidget() main_lay = QVBoxLayout() main_widget.setLayout(main_lay) divider_left = MDivider.left(text) divider_center = MDivider.center(text) divider_right = MDivider.right(text) divider_ver = MDivider.vertical() main_lay.addWidget(divider_left) main_lay.addWidget(divider_center) main_lay.addWidget(divider_right) main_lay.addWidget(divider_ver) qtbot.addWidget(main_widget) main_widget.show() _asset_divider_perform(divider_left, True and visible_text, Qt.AlignLeft) _asset_divider_perform(divider_right, True and visible_text, Qt.AlignRight) _asset_divider_perform(divider_center, True and visible_text, Qt.AlignCenter) _asset_divider_perform(divider_ver, False, Qt.AlignCenter) assert divider_left.get_dayu_text() == text assert divider_right.get_dayu_text() == text assert divider_center.get_dayu_text() == text assert divider_ver.get_dayu_text() == ''
def test_badge_count(qtbot, num, text, visible): """Test MBadge init.""" label = QLabel('test') badge_1 = MBadge.count(count=num, widget=label) badge_2 = MBadge.count(num) main_widget = QWidget() main_lay = QVBoxLayout() main_widget.setLayout(main_lay) main_lay.addWidget(badge_1) main_lay.addWidget(badge_2) qtbot.addWidget(main_widget) main_widget.show() assert badge_1._badge_button.text() == text assert badge_1._badge_button.isVisible() == visible assert badge_2._badge_button.text() == text assert badge_2._badge_button.isVisible() == visible assert badge_1.get_dayu_dot() is None assert badge_2.get_dayu_dot() is None assert badge_1.get_dayu_text() is None assert badge_2.get_dayu_text() is None assert badge_1.get_dayu_count() == num assert badge_2.get_dayu_count() == num assert badge_1.get_dayu_overflow() == 99 assert badge_2.get_dayu_overflow() == 99
def setRegeditWindow(self): self.custom_widget = QWidget() custom_lay = QFormLayout() self.custom_widget.setLayout(custom_lay) self.btn_regedit_image = MPushButton(u'选择文件') self.line_edit_regedit_name = MLineEdit() self.line_edit_regedit_password = MLineEdit() self.line_edit_regedit_password2 = MLineEdit() self.switch_identity = MSwitch().large() custom_lay.addRow(u' 选择头像: ', self.btn_regedit_image) custom_lay.addRow(u' 账号名称: ', self.line_edit_regedit_name) custom_lay.addRow(u' 账号密码: ', self.line_edit_regedit_password) custom_lay.addRow(u' 确认密码: ', self.line_edit_regedit_password2) custom_lay.addRow(u' 管理权限: ', self.switch_identity) # custom_lay.addRow(u'管理钥匙: ',self.line_edit_key) # self.custom_widget.layout().addRow(MLabel) self.drawer = MDrawer('Regedit', parent=self) submit_button = MPushButton(u'注册').primary() cancel_button = MPushButton(u'取消') self.drawer.add_button(cancel_button) self.drawer.add_button(submit_button) self.drawer.setFixedWidth(Data.getWindowWidth() / 5) self.drawer.set_widget(self.custom_widget) self.line_edit_regedit_name.setText(self.username) self.line_edit_regedit_password.setText(self.password) self.line_edit_regedit_password2.setText(self.rePassword) self.switch_identity.clicked.connect(self.signUpManager) self.btn_regedit_image.clicked.connect(self.setHeadPorfie) submit_button.clicked.connect(self.regedit) cancel_button.clicked.connect(self.drawer.close)
def test_cursor_mixin(qtbot): @mixin.cursor_mixin class _TestClass(QPushButton): def __init__(self, parent=None): super(_TestClass, self).__init__(parent) geo = QApplication.desktop().screenGeometry() self.setGeometry(geo.width() / 4, geo.height() / 4, geo.width() / 2, geo.height() / 2) main_widget = QWidget() button_test = _TestClass() button_normal = QPushButton() test_lay = QVBoxLayout() test_lay.addWidget(button_test) test_lay.addWidget(button_normal) main_widget.setLayout(test_lay) qtbot.addWidget(main_widget) main_widget.show() button_test.setEnabled(False) assert QApplication.overrideCursor() is None # Not override cursor qtbot.mouseMove(button_test) # mouse enter def check_cursor(): assert QApplication.overrideCursor() is not None assert QApplication.overrideCursor().shape() == Qt.ForbiddenCursor qtbot.waitUntil(check_cursor) qtbot.mouseMove(button_normal) # mouse leave def check_cursor(): assert QApplication.overrideCursor() is None # Restore override cursor qtbot.waitUntil(check_cursor) button_test.setEnabled(True) qtbot.mouseMove(button_test) # mouse enter def check_cursor(): assert QApplication.overrideCursor() is not None assert QApplication.overrideCursor().shape() == Qt.PointingHandCursor qtbot.waitUntil(check_cursor) qtbot.mouseMove(button_normal) # mouse leave def check_cursor(): assert QApplication.overrideCursor() is None # Restore override cursor qtbot.waitUntil(check_cursor)
def __init__(self, parent=None): super(MMenuTabWidget, self).__init__(parent=parent) self.tool_button_group = MBlockButtonGroup() self._bar_layout = QHBoxLayout() self._bar_layout.setContentsMargins(10, 0, 10, 0) self._bar_layout.addWidget(self.tool_button_group) self._bar_layout.addStretch() bar_widget = QWidget() bar_widget.setObjectName('bar_widget') bar_widget.setLayout(self._bar_layout) bar_widget.setAttribute(Qt.WA_StyledBackground) main_lay = QVBoxLayout() main_lay.setContentsMargins(0, 0, 0, 0) main_lay.setSpacing(0) main_lay.addWidget(bar_widget) main_lay.addWidget(MDivider()) main_lay.addSpacing(5) self.setLayout(main_lay) self.setFixedHeight(dayu_theme.large + 10)
def test_hover_shadow_mixin(qtbot): @mixin.hover_shadow_mixin class _TestClass(QPushButton): def __init__(self, parent=None): super(_TestClass, self).__init__(parent) geo = QApplication.desktop().screenGeometry() self.setGeometry(geo.width() / 4, geo.height() / 4, geo.width() / 2, geo.height() / 2) main_widget = QWidget() button_test = _TestClass() button_normal = QPushButton() test_lay = QVBoxLayout() test_lay.addWidget(button_test) test_lay.addWidget(button_normal) main_widget.setLayout(test_lay) qtbot.addWidget(main_widget) assert button_test.graphicsEffect() is None main_widget.show() qtbot.mouseMove(button_test) # mouse in def check_effect(): graphics_effect = button_test.graphicsEffect() assert graphics_effect is not None assert graphics_effect.isEnabled() assert isinstance(graphics_effect, QGraphicsDropShadowEffect) qtbot.waitUntil(check_effect) qtbot.mouseMove(button_normal) # mouse out def check_effect(): assert button_test.graphicsEffect() is not None assert not button_test.graphicsEffect().isEnabled() qtbot.waitUntil(check_effect) qtbot.mouseMove(button_test) # mouse in def check_effect(): assert button_test.graphicsEffect() is not None assert button_test.graphicsEffect().isEnabled() qtbot.waitUntil(check_effect)
def test_label_elide_mode(qtbot, text, elide): """Test MLabel elide mode""" main_widget = QWidget() main_widget.setGeometry(0, 0, 30, 200) main_lay = QVBoxLayout() main_widget.setLayout(main_lay) label_left = MLabel() label_left.set_elide_mode(Qt.ElideLeft) label_left.setText(text) label_right = MLabel() label_right.set_elide_mode(Qt.ElideRight) label_right.setText(text) label_center = MLabel(text) label_center.set_elide_mode(Qt.ElideMiddle) label_center.setText(text) main_lay.addWidget(label_left) main_lay.addWidget(label_right) main_lay.addWidget(label_center) qtbot.addWidget(main_widget) main_widget.show() ellipsis = u'…' if elide: assert label_left.property('text').startswith(ellipsis) assert label_right.property('text').endswith(ellipsis) center_text = label_center.property('text') assert center_text.count(ellipsis) \ and not center_text.endswith(ellipsis) else: assert label_left.property('text') == label_left.text() assert label_right.property('text') == label_right.text() assert label_center.property('text') == label_center.text() assert label_left.get_elide_mode() == Qt.ElideLeft assert label_right.get_elide_mode() == Qt.ElideRight assert label_center.get_elide_mode() == Qt.ElideMiddle
def test_badge_overflow(qtbot, num, text, overflow): """Test MBadge init.""" badge = MBadge.count(num) badge.set_dayu_overflow(overflow) main_widget = QWidget() main_lay = QVBoxLayout() main_widget.setLayout(main_lay) main_lay.addWidget(badge) qtbot.addWidget(main_widget) main_widget.show() assert badge._badge_button.text() == text assert badge.get_dayu_dot() is None assert badge.get_dayu_text() is None assert badge.get_dayu_count() == num assert badge.get_dayu_overflow() == overflow
def test_badge_dot(qtbot, show, visible): """Test MBadge init.""" label = QLabel('test') badge_1 = MBadge.dot(show=show, widget=label) badge_2 = MBadge.dot(show) main_widget = QWidget() main_lay = QVBoxLayout() main_widget.setLayout(main_lay) main_lay.addWidget(badge_1) main_lay.addWidget(badge_2) qtbot.addWidget(main_widget) main_widget.show() assert badge_1._badge_button.isVisible() == visible assert badge_2._badge_button.isVisible() == visible assert badge_1.get_dayu_dot() == show assert badge_2.get_dayu_dot() == show assert badge_1.get_dayu_text() is None assert badge_2.get_dayu_text() is None assert badge_1.get_dayu_count() is None assert badge_2.get_dayu_count() is None
class UserPanel(QWidget): """用户面板""" login_signal = QtCore.Signal(str) #用户面板的登陆信号 CorrectUserName = None def __init__(self): super(UserPanel, self).__init__() self.username = None # 初始化用户名 self.imgPath = hpPath + "\\" + "default.jpg" #保存用户头像 self.password = None self.rePassword = None self.key = None self.WM = False self.login_userName = None self.login_password = None self.setObjectName("UserPanel") self.setupUI() self.setTabOrder(self.btn_sign_up, self.line_edit_name) self.setTabOrder(self.line_edit_name, self.line_edit_password) self.setTabOrder(self.line_edit_password, self.btn_sign_in) self.setTabOrder(self.btn_sign_in, self.btn_sign_up) # 设置用户界面 def setupUI(self): self.setMinimumSize(Data.getWindowWidth() / 4.7, Data.getWindowHeight() / 2) self.setMaximumSize(Data.getWindowWidth() / 4.7, Data.getWindowHeight() / 2) self.setWindowModality(Qt.ApplicationModal) Data.setWindowCenter(self) self.setLayout(QVBoxLayout()) btn = MPushButton("SIGNAL IN") btn.setIcon(QIcon(file_path + r"\res\ZeusDesign\a.png")) self.layout().addWidget(btn) self.layout().addWidget(MDivider()) self.line_edit_name = MLineEdit() self.line_edit_name.setPlaceholderText('username') self.line_edit_name.set_prefix_widget( MToolButton().svg('user_line.svg').icon_only()) self.line_edit_password = MLineEdit() self.line_edit_password.setPlaceholderText('password') self.line_edit_password.setEchoMode(QLineEdit.Password) self.line_edit_password.set_prefix_widget( MToolButton().svg('confirm_line.svg').icon_only()) self.layout().addWidget(self.line_edit_name) self.layout().addWidget(self.line_edit_password) self.layout().addWidget(MDivider()) self.btn_sign_in = MPushButton(u'登录').large().primary() self.layout().addWidget(self.btn_sign_in) self.btn_sign_up = MPushButton(u'注册').large().primary() self.layout().addWidget(self.btn_sign_up) dayu_theme.background_color = "#262626" dayu_theme.apply(self) self.layout().setContentsMargins(20, 40, 20, 40) self.btn_sign_up.clicked.connect(self.on_sigin_up_click) self.btn_sign_in.clicked.connect(self.on_sigin_in_click) self.setWindowTitle(u"登录界面") # 弹出信息提示窗口 def slot_show_message(self, func, config): func(config, parent=self) # 登录按钮按下,加载登录界面 def on_sigin_in_click(self): self.login_userName = self.line_edit_name.text() self.login_password = self.line_edit_password.text() if not self.login_userName: self.slot_show_message(MMessage.error, (u'请输入用户名')) return 0 if not self.login_password: self.slot_show_message(MMessage.error, (u'请输入密码')) return 0 collist = userdb.list_collection_names() if self.login_userName in collist: # 判断该用户是否存在 colUser = userdb[self.login_userName] # Todo: 从数据库读取数据,判断是否名字存在,密码是否正确,成功则执行login函数,失败提示 # 从数据库提取密码 for x in colUser.find({"_id": "Password"}, {"Password": 1}): if "Password" in x: DBpassword = x["Password"] if not DBpassword: return 0 if self.login_password == DBpassword: saveLoginTime(self.login_userName) # 保存登陆时间 self.login_signal.emit(self.login_userName) # 发射登陆信号 UserPanel.CorrectUserName = self.login_userName msg = MToast.loading(u'正在登录中', parent=self) msg.sig_closed.connect( functools.partial(MToast.success, u'登录成功', self)) self.close() else: self.slot_show_message(MMessage.error, (u'密码错误')) else: self.slot_show_message(MMessage.error, (u'该用户名不存在')) return 0 # 设置注册界面 def setRegeditWindow(self): self.custom_widget = QWidget() custom_lay = QFormLayout() self.custom_widget.setLayout(custom_lay) self.btn_regedit_image = MPushButton(u'选择文件') self.line_edit_regedit_name = MLineEdit() self.line_edit_regedit_password = MLineEdit() self.line_edit_regedit_password2 = MLineEdit() self.switch_identity = MSwitch().large() custom_lay.addRow(u' 选择头像: ', self.btn_regedit_image) custom_lay.addRow(u' 账号名称: ', self.line_edit_regedit_name) custom_lay.addRow(u' 账号密码: ', self.line_edit_regedit_password) custom_lay.addRow(u' 确认密码: ', self.line_edit_regedit_password2) custom_lay.addRow(u' 管理权限: ', self.switch_identity) # custom_lay.addRow(u'管理钥匙: ',self.line_edit_key) # self.custom_widget.layout().addRow(MLabel) self.drawer = MDrawer('Regedit', parent=self) submit_button = MPushButton(u'注册').primary() cancel_button = MPushButton(u'取消') self.drawer.add_button(cancel_button) self.drawer.add_button(submit_button) self.drawer.setFixedWidth(Data.getWindowWidth() / 5) self.drawer.set_widget(self.custom_widget) self.line_edit_regedit_name.setText(self.username) self.line_edit_regedit_password.setText(self.password) self.line_edit_regedit_password2.setText(self.rePassword) self.switch_identity.clicked.connect(self.signUpManager) self.btn_regedit_image.clicked.connect(self.setHeadPorfie) submit_button.clicked.connect(self.regedit) cancel_button.clicked.connect(self.drawer.close) # 注册按钮按下 def on_sigin_up_click(self): self.slot_new_account() # 注册 def slot_new_account(self): self.setRegeditWindow() self.drawer.show() # 设置头像 def setHeadPorfie(self): dialog = QFileDialog() dialog.setStyleSheet(Data.getQSS()) #根据当前所在文件目录,设置默认打开文件格式 dialog.setNameFilter(u"图片文件(*.jpg *.png *.jpeg);;") #加载对应的文件 dialog.setFileMode(QFileDialog.ExistingFiles) dialog.setViewMode(QFileDialog.Detail) if dialog.exec_(): imgPaths = dialog.selectedFiles() self.imgPath = imgPaths[0] img = cv2.imread(self.imgPath) flag = min(img.shape[0], img.shape[1]) newimg = img[((img.shape[0] - flag) // 2):((img.shape[0] + flag) // 2), ((img.shape[1] - flag) // 2):((img.shape[1] + flag) // 2)] newimg = cv2.resize(newimg, (150, 150), interpolation=cv2.INTER_AREA) cv2.imwrite(hpPath + "\\" + "buffer.jpg", newimg) #将图片作为缓存存入指定文件内 # pixmap = QtGui.QPixmap(hpPath + "\\" + "buffer.jpg") # self.lab_headProfile.setPixmap(pixmap) # 打开头像编辑器 self.hpw = headProfieWindow(self.imgPath) self.hpw.show() # self.hpw.hPOK_signal.connect(lambda: self.setPicture()) # #保存用户头像路径 # def setPicture(self): # self.imgPath = file_path + r"\res\headPortrial\buffer.jpg" # 设置管理员权限 def signUpManager(self): if (self.WM): self.WM = False # self.custom_widget.layout().deleteLater(self.custom_widget.layout().itemAt(1)) # self.custom_widget.layout().removeWidget(self.line_edit_key) # self.custom_widget.layout().removeWidget(self.key_label) # .deleteLater() self.key_label.deleteLater() self.line_edit_key.deleteLater() # self.key_widget.close() else: self.WM = True self.key_label = MLabel(u"管理密钥:") self.line_edit_key = MLineEdit() # self.key_widget = QWidget() # self.key_widget.setLayout(QHBoxLayout()) # self.key_widget.layout().addWidget(self.key_label) # self.key_widget.layout().addWidget(self.line_edit_key) self.custom_widget.layout().addRow(self.key_label, self.line_edit_key) # self.custom_widget.layout().addWidget(self.key_widget) #点击完成注册 def regedit(self): self.username = self.line_edit_regedit_name.text() self.password = self.line_edit_regedit_password.text() self.rePassword = self.line_edit_regedit_password2.text() self.key = None #判断是否输入信息 if not self.username: self.slot_show_message(MMessage.error, (u'请输入用户名!')) return 0 if not self.password: self.slot_show_message(MMessage.error, (u'请输入密码!')) return 0 if not self.rePassword: self.slot_show_message(MMessage.error, (u'请再次输入密码!')) return 0 if self.rePassword == self.password: collist = userdb.list_collection_names() if self.username in collist: # 判断该用户是否存在 self.slot_show_message(MMessage.error, (u'该用户已经存在')) return 0 else: if self.WM: #注册管理员 self.key = self.line_edit_key.text() if self.key == "IDO": #管理员密钥 saveUsername(self.username) savePassword(self.username, self.password) saveUserID(self.username, "管理员") saveRegisterTime(self.username) if self.imgPath: #如果设置了截图 saveHeadPorfile(self.username, hpPath + "\\" + "buffer.jpg") else: saveHeadPorfile(self.username, hpPath + "\\" + "default.jpg") self.drawer.close() #注册成功,关闭窗口 else: self.slot_show_message(MMessage.error, (u'密钥错误')) return 0 else: #注册普通用户 saveUsername(self.username) savePassword(self.username, self.password) saveUserID(self.username, "普通用户") saveRegisterTime(self.username) if self.imgPath: # 如果设置了头像截图 saveHeadPorfile(self.username, self.imgPath) msg = MToast.loading(u'正在注册中', parent=self) msg.sig_closed.connect( functools.partial(MToast.success, u'注册成功', self)) self.drawer.close() # 注册成功,关闭窗口 else: self.slot_show_message(MMessage.error, (u'两次输入密码不一致!')) return 0 # 登录,显示登录界面 def login(self, name): self.widget = QWidget() self.widget.setMinimumSize(Data.getWindowWidth() / 6, Data.getWindowHeight() / 4) # 加载ui,并设置ui界面 #self.ui = loadUi(file_path + "\\res\\UI\\LoginIn.ui") self.ui = loadUi(file_path + "\\res\\UI\\LoginIn.ui") self.ui.setParent(self.widget) self.widget.setLayout(QVBoxLayout()) # 设置布局 self.widget.layout().addWidget(self.ui) self.setWidget(self.widget) # 获取控件 self.label_name = self.ui.findChild(QLabel, "label_name") self.label_identity = self.ui.findChild(QLabel, "label_identity") self.label_headLogin = self.ui.findChild(QLabel, "label_headLogin") self.btn_editUser = self.ui.findChild(QPushButton, "btn_editUser") # 链接信号与槽函数 self.btn_editUser.clicked.connect(lambda: self.editUser(name)) #saveLoginTime(name) # 储存登陆时间 # Todo 根据名字访问数据库里的信息,加载到界面 self.label_name.setText(name) # 显示用户名 colUser = userdb[name] for x in colUser.find({"_id": "UserID"}, {"UserID": 1}): ID = x["UserID"] self.label_identity.setText(ID) # 显示身份 # 设置头像 self.setHeadPortrait(name, self.label_headLogin) #设置操作记录 self.Userlogin_signal.emit() # Todo 点击头像,可以更换头像界面,然后把头像写入数据库 # 设置头像 def setHeadPortrait(self, username, QWidget): path = file_path + r"\res\headPortrial\default.jpg" nameList = os.listdir(file_path + r"\res\headPortrial") for name in nameList: if (username + ".jpg") == name: path = file_path + r"\res\headPortrial" + "\\" + username + ".jpg" pixmap = QtGui.QPixmap(path) QWidget.setPixmap(pixmap) # #获得用户名并加载登录后用户界面 # def getUsername(self): # self.username = self.loginWin.username # self.login(self.username) #编辑用户信息 def editUser(self, username): self.editUserWin = editUserWinodw(username) self.editUserWin.show() self.editUserWin.editUser_signal.connect( lambda: self.reSetUserInformation(username)) #链接确认编辑信号与槽函 #重新设置用户信息 def reSetUserInformation(self, username): self.setHeadPortrait(username, self.label_headLogin) colUser = userdb[username] for x in colUser.find({"_id": "UserID"}, {"UserID": 1}): ID = x["UserID"] self.label_identity.setText(ID) # 显示身份
def __init__(self, username): super(editUserWinodw, self).__init__() self.setWindowModality(Qt.ApplicationModal) self.setMinimumSize(Data.getWindowHeight() / 1.5, Data.getWindowHeight() / 3) # self.setMinimumSize(Data.getWindowWidth() / 3, Data.getWindowHeight() / 3) # self.setMaximumSize(Data.getWindowWidth() / 3, Data.getWindowHeight() / 3) self.username = username self.key = None self.wchp = False self.wcun = False self.wcpw = False self.wcid = False # 设置窗口名称 self.setWindowTitle(u"用户窗口") self.tab = MLineTabWidget() widget = QWidget() widget_child = QWidget() widget_child_2 = QWidget() widget.setLayout(QHBoxLayout()) widget_child.setLayout(QVBoxLayout()) widget_child_2.setLayout(QVBoxLayout()) self.label_headProfile = MLabel() self.label_headProfile.setAlignment(Qt.AlignHCenter) self.btn_changeHead = MPushButton(u'选择新头像') widget_child.layout().addWidget(self.label_headProfile) widget_child.layout().addWidget(self.btn_changeHead) # widget_child.layout().addStretch() self.let_username = MLineEdit(text='username') tool_button = MLabel(text=u'用户名').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.let_username.set_prefix_widget(tool_button) widget_child_2.layout().addWidget(self.let_username) self.let_ID = MLineEdit(text='identity') self.btn_changeID = MPushButton(text=u'修改身份').primary() self.btn_changeID.setFixedWidth(80) self.let_ID.set_suffix_widget(self.btn_changeID) widget_child_2.layout().addWidget(self.let_ID) self.let_key = MLineEdit(text='') tool_button = MLabel(text=u'密钥').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.let_key.set_prefix_widget(tool_button) widget_child_2.layout().addWidget(self.let_key) self.let_password = MLineEdit(text='***********') self.btn_changePassword = MPushButton(text=u'修改密码').primary() self.btn_changePassword.setFixedWidth(80) self.let_password.set_suffix_widget(self.btn_changePassword) widget_child_2.layout().addWidget(self.let_password) self.btn_ok = MPushButton(u'确定').large().primary() self.btn_cancel = MPushButton(u'取消').large().primary() layout = QHBoxLayout() layout.addWidget(self.btn_ok) layout.addWidget(self.btn_cancel) widget_child_2.layout().addLayout(layout) widget.layout().addWidget(widget_child) widget.layout().addWidget(widget_child_2) self.tab.add_tab(widget, u'用户信息') widget2 = QWidget() self.ui = loadUi(file_path + r"\res\UI\EditUserWindow.ui") self.ui.setParent(widget2) widget2.setLayout(QVBoxLayout()) widget2.layout().addWidget(self.ui) self.tableWidget_operationNode = self.ui.findChild( QTableWidget, "tableWidget_operationNode") self.tableWidget_operationNode.setStyleSheet(Data.getQSS()) setSectionResizeMode(self.tableWidget_operationNode.horizontalHeader(), QHeaderView.Stretch) # 自适应 # widget2.layout().addSpacing(100) self.tab.add_tab(widget2, u'操作记录') btn_layout = QHBoxLayout() main_lay = QVBoxLayout() main_lay.addSpacing(20) main_lay.addWidget(self.tab) main_lay.addWidget(MDivider(u'')) main_lay.addLayout(btn_layout) main_lay.addSpacing(20) self.setLayout(main_lay) dayu_theme.background_color = "#262626" dayu_theme.apply(self) # 设置默认值 self.tableWidget_operationNode.setHorizontalHeaderLabels( [u'操作', u'文件名', u'时间']) # 设置资产操作记录表: colUser = userdb[self.username] userlist = colUser.find({}, {"FileName": 1, "Operation": 1, "Time": 1}) i = 0 for xdir in userlist: if "Operation" in xdir: str1 = xdir["Operation"] newItem1 = QTableWidgetItem(str1) self.tableWidget_operationNode.setItem(i, 0, newItem1) if "FileName" in xdir: str2 = xdir["FileName"] newItem2 = QTableWidgetItem(str2) self.tableWidget_operationNode.setItem(i, 1, newItem2) if "Time" in xdir: str3 = xdir["Time"] newItem3 = QTableWidgetItem(str3) self.tableWidget_operationNode.setItem(i, 2, newItem3) i += 1 #设置默认值 pixmap = QtGui.QPixmap(hpPath + "\\" + self.username + ".jpg") self.label_headProfile.setPixmap(pixmap) self.let_username.setText(self.username) self.let_username.setReadOnly(True) #只读 self.let_ID.setReadOnly(True) # 只读 self.let_password.setReadOnly(True) # 只读 self.let_password.setEchoMode(QLineEdit.Password) #输入密码形式 # 从数据库提取ID for x in colUser.find({"_id": "UserID"}, {"UserID": 1}): ID = x["UserID"] self.let_ID.setText(ID) # 显示身份 self.let_password.setText("**********") #链接信号与槽 self.btn_changeHead.clicked.connect(lambda: self.editHeadProfile()) self.btn_ok.clicked.connect(lambda: self.ok()) self.btn_cancel.clicked.connect(lambda: self.cancel()) self.btn_changePassword.clicked.connect(lambda: self.changePassword()) self.btn_changeID.clicked.connect(lambda: self.setID())
class MainController(): """主窗口连接类""" def __init__(self): self.view = MainView() self.userName = None #保存用户名称 self.hasLogin = False #是否已经登录 self.setActionConnect() self.view.centerWindow.load_view_signal.connect(self.addDrawer) #设置工具栏上的按钮与子窗口连接 def setActionConnect(self): self.view.menubar.file_signal.connect(self.openFile) self.view.menubar.user_signal.connect(self.showUserPanel) self.view.menubar.edit_signal.connect(self.editFile) self.view.menubar.about_siganl.connect(self.showAbout) # 显示用户页 def showUserPanel(self): if self.hasLogin: self.userInfo = User.editUserWinodw(self.userName) self.userInfo.show() self.userInfo.editUser_signal.connect( lambda: self.setUserName(self.userName)) else: self.userPanel = User.UserPanel() self.userPanel.show() self.userPanel.login_signal.connect(self.setUserName) #设置用户信息 def setUserName(self, username): self.userName = username MainController.userNameMT = self.userPanel.username # 获取用户名 self.hasLogin = True pixmap = QPixmap(file_path + "\\res\\headPortrial\\" + username + ".jpg") self.view.menubar.user_toolButton.setIcon(pixmap) self.view.menubar.label.setText(self.userName) # 弹出信息提示窗口 def slot_show_message(self, func, config): func(config, parent=self.view) #打开文件 def openFile(self): if self.hasLogin: dialog = QFileDialog() # dayu_theme.apply(dialog) dialog.setStyleSheet(Data.getQSS()) #根据当前所在文件目录,设置默认打开文件格式 dialog.setNameFilter(u"资源文件(*.png);;图片文件(*.jpg *.png *.jpeg);;") #加载对应的文件 dialog.setFileMode(QFileDialog.ExistingFiles) dialog.setViewMode(QFileDialog.Detail) self.paths = None if dialog.exec_(): self.paths = dialog.selectedFiles() if self.paths == None: return # 创建标签选择窗口 self.tagWidget = Tag.TagWidget(self.paths, self.userName) self.tagWidget.show() Data.setWindowCenter(self.tagWidget) self.tagWidget.send_tag_signal.connect( self.cenWinAddTags) # 链接添加标签的信号到中心窗口添加标签方法 self.tagWidget.load_file_signal.connect(self.slot_show_loading) else: self.slot_show_message(MMessage.info, (u'请先登录账号!')) # 中心窗口添加新按钮 def cenWinAddTags(self, tags): # 获取新添加的标签 tags_add = tags.split(",") for tag in tags_add: if tag.isspace() == False: self.view.centerWindow.addTag(tag) # 加载资源动画 def slot_show_loading(self): msg = MMessage.loading(u'正在导入资源', parent=self.view) msg.sig_closed.connect( functools.partial(MMessage.success, u'资源导入成功', self.view)) # 添加参数面板 def addDrawer(self, type, name, path): if (self.userName == None): self.slot_show_message(MMessage.warning, u"请先登录账号") return self.parmerPanel = Parmers.ParmerPanel(self.userName) self.parmerPanel.setParam(type, name, path) self.parmerPanel.send_message_signal.connect(self.setMessageBox) self.custom_widget = QWidget() custom_lay = QFormLayout() self.custom_widget.setLayout(custom_lay) custom_lay.setContentsMargins(0, 0, 0, 0) custom_lay.addWidget(self.parmerPanel) self.drawer = MDrawer(u'参数面板', parent=self.view.centerWindow) self.drawer.layout().setContentsMargins(0, 0, 0, 0) self.drawer.setFixedWidth(Data.getWindowWidth() / 3) self.drawer.set_widget(self.custom_widget) # self.drawer.layout().addWidget(self.custom_widget) dayu_theme.apply(self.drawer) self.drawer.show() # self.parmerPanel.model_widget.setMinimumSize(Data.getWindowHeight()/3,Data.getWindowHeight()/3) # self.view.centerWindow.layout().addWidget(self.parmerPanel.model_widget) self.parmerPanel.model_widget.embed() self.parmerPanel.setModelWidget(path) #设置3d视图 def setMessageBox(self, s, str_get): if (s == "warnning"): MMessage.warning(str_get, parent=self.view) elif (s == "info"): MMessage.info(str_get, parent=self.view) elif (s == "success"): MMessage.success(str_get, parent=self.view) elif (s == "error"): MMessage.error(str_get, parent=self.view) def editFile(self): if self.hasLogin: paths = [] for file in self.view.centerWindow.widget.fileList: paths.append(os.path.dirname(file)) self.editPanel = Edit.EditWidget(paths) self.editPanel.send_message_signal.connect(self.setMessageBox) self.editPanel.show() else: self.slot_show_message(MMessage.info, (u'请先登录账号!')) def showAbout(self): self.aboutWidget = About.AboutWidget() self.aboutWidget.show()
def __init__(self, table_view=True, big_view=False, parent=None): super(MItemViewFullSet, self).__init__(parent) self.sort_filter_model = MSortFilterModel() self.source_model = MTableModel() self.sort_filter_model.setSourceModel(self.source_model) self.stack_widget = QStackedWidget() self.view_button_grp = MToolButtonGroup(exclusive=True) data_group = [] if table_view: self.table_view = MTableView(show_row_count=True) self.table_view.doubleClicked.connect(self.sig_double_clicked) self.table_view.pressed.connect(self.slot_left_clicked) self.table_view.setModel(self.sort_filter_model) self.stack_widget.addWidget(self.table_view) data_group.append({ 'svg': 'table_view.svg', 'checkable': True, 'tooltip': u'Table View' }) if big_view: self.big_view = MBigView() self.big_view.doubleClicked.connect(self.sig_double_clicked) self.big_view.pressed.connect(self.slot_left_clicked) self.big_view.setModel(self.sort_filter_model) self.stack_widget.addWidget(self.big_view) data_group.append({ 'svg': 'big_view.svg', 'checkable': True, 'tooltip': u'Big View' }) # 设置多个view 共享 MItemSelectionModel leader_view = self.stack_widget.widget(0) self.selection_model = leader_view.selectionModel() for index in range(self.stack_widget.count()): if index == 0: continue other_view = self.stack_widget.widget(index) other_view.setSelectionModel(self.selection_model) self.selection_model.currentChanged.connect(self.sig_current_changed) self.selection_model.currentRowChanged.connect( self.sig_current_row_changed) self.selection_model.currentColumnChanged.connect( self.sig_current_column_changed) self.selection_model.selectionChanged.connect( self.sig_selection_changed) self.tool_bar = QWidget() self.top_lay = QHBoxLayout() self.top_lay.setContentsMargins(0, 0, 0, 0) if data_group and len(data_group) > 1: self.view_button_grp.sig_checked_changed.connect( self.stack_widget.setCurrentIndex) self.view_button_grp.set_button_list(data_group) self.view_button_grp.set_dayu_checked(0) self.top_lay.addWidget(self.view_button_grp) self.search_line_edit = MLineEdit().search().small() self.search_attr_button = MToolButton().icon_only().svg( 'down_fill.svg').small() self.search_line_edit.set_prefix_widget(self.search_attr_button) self.search_line_edit.textChanged.connect( self.sort_filter_model.set_search_pattern) self.search_line_edit.setVisible(False) self.top_lay.addStretch() self.top_lay.addWidget(self.search_line_edit) self.tool_bar.setLayout(self.top_lay) self.page_set = MPage() self.main_lay = QVBoxLayout() self.main_lay.setSpacing(5) self.main_lay.setContentsMargins(0, 0, 0, 0) self.main_lay.addWidget(self.tool_bar) self.main_lay.addWidget(self.stack_widget) self.main_lay.addWidget(self.page_set) self.setLayout(self.main_lay)
def _init_ui(self): basic_card_lay = MFlowLayout() basic_card_lay.setSpacing(20) for setting in [{ 'title': '', }, { 'title': 'Card Title', 'size': dayu_theme.small }, { 'title': 'Card Title', 'image': MPixmap('app-houdini.png') }, { 'title': 'Card Title', 'extra': 'More', 'image': MPixmap('app-houdini.png') }, { 'title': 'Card Title', 'extra': 'More', }]: card_0 = MCard(**setting) content_widget_0 = QWidget() content_lay_0 = QVBoxLayout() content_lay_0.setContentsMargins(15, 15, 15, 15) content_widget_0.setLayout(content_lay_0) for i in range(4): content_lay_0.addWidget(MLabel('Card Content {}'.format(i + 1))) card_0.set_widget(content_widget_0) basic_card_lay.addWidget(card_0) meta_card_lay = MFlowLayout() meta_card_lay.setSpacing(20) for setting in [ { 'title': u'Houdini', 'description': u'Side Effects Software的旗舰级产品,是创建高级视觉效果的有效工具', 'avatar': MPixmap('user_line.svg'), 'cover': MPixmap('app-houdini.png') }, { 'title': u'Autodesk Maya', 'description': u'3D 数字动画和视觉效果的世界领先软件应用程序', 'cover': MPixmap('app-maya.png') }, ]: meta_card = MMeta() meta_card.setup_data(setting) meta_card_lay.addWidget(meta_card) task_card_lay = QVBoxLayout() # task_card_lay.setSpacing(10) for setting in [ { 'title': u'Task A', 'description': u'demo pl_0010 Animation \n2019/04/01 - 2019/04/09', 'avatar': MPixmap('success_line.svg', dayu_theme.success_color), }, { 'title': u'Task B', 'description': u'#2 closed by xiao hua.', 'avatar': MPixmap('error_line.svg', dayu_theme.error_color) }, { 'title': u'Task C', 'description': u'#3 closed by xiao hua.', 'avatar': MPixmap('warning_line.svg', dayu_theme.warning_color) } ] * 5: meta_card = MMeta(extra=True) meta_card.setup_data(setting) task_card_lay.addWidget(meta_card) left_lay = QVBoxLayout() left_lay.addWidget(MDivider('Basic')) left_lay.addLayout(basic_card_lay) left_lay.addWidget(MDivider('Meta E-Commerce Example')) left_lay.addLayout(meta_card_lay) left_lay.addStretch() left_widget = QWidget() left_widget.setLayout(left_lay) right_lay = QVBoxLayout() right_lay.addWidget(MDivider('Meta Task Item Example')) scroll = QScrollArea() scroll.setWidgetResizable(True) task_widget = QWidget() task_widget.setLayout(task_card_lay) scroll.setWidget(task_widget) right_lay.addWidget(scroll) right_widget = QWidget() right_widget.setLayout(right_lay) splitter = QSplitter() splitter.addWidget(left_widget) splitter.addWidget(right_widget) splitter.setStretchFactor(0, 80) splitter.setStretchFactor(1, 20) main_lay = QVBoxLayout() main_lay.addWidget(splitter) self.setLayout(main_lay)
def _init_ui(self): self.setWindowModality(Qt.ApplicationModal) self.setMinimumSize(Data.getWindowWidth() / 4.5, Data.getWindowHeight() / 1.6) self.setMaximumSize(Data.getWindowWidth() / 4.5, Data.getWindowHeight() / 1.6) browser_4 = MClickBrowserFolderToolButton().huge() self.lineEdit = MLineEdit(text='filepath') self.lineEdit.setReadOnly(True) browser_4.sig_folder_changed.connect(self.lineEdit.setText) lay_1 = QHBoxLayout() lay_1.addWidget(self.lineEdit) lay_1.addWidget(browser_4) self.tab = MLineTabWidget() widget = QWidget() widget.setLayout(QVBoxLayout()) self.lineEdit_width = MLineEdit() tool_button = MLabel(text=u'宽度').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.lineEdit_width.set_prefix_widget(tool_button) self.lineEdit_width.setText("1080") self.lineEdit_width.setValidator(QIntValidator()) self.lineEdit_height = MLineEdit() tool_button = MLabel(text=u'高度').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.lineEdit_height.set_prefix_widget(tool_button) self.lineEdit_height.setText("720") self.lineEdit_height.setValidator(QIntValidator()) self.lineEdit_level = MLineEdit() tool_button = MLabel(text=u'精度').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.lineEdit_level.set_prefix_widget(tool_button) self.lineEdit_level.setText("50") self.lineEdit_level.setValidator(QIntValidator()) widget.layout().addWidget(MLabel(u'贴图大小')) widget.layout().addWidget(self.lineEdit_width) widget.layout().addWidget(self.lineEdit_height) widget.layout().addSpacing(10) widget.layout().addWidget(MLabel(u'贴图精度')) widget.layout().addWidget(self.lineEdit_level) self.tab.add_tab(widget, u'低精度图片') widget2 = QWidget() widget2.setLayout(QVBoxLayout()) self.MlineEdit_level = MLineEdit() tool_button = MLabel(text=u'精度').mark().secondary() tool_button.setAlignment(Qt.AlignCenter) tool_button.setFixedWidth(80) self.MlineEdit_level.set_prefix_widget(tool_button) self.MlineEdit_level.setText("50") self.MlineEdit_level.setValidator(QIntValidator()) widget2.layout().addWidget(MLabel(u'模型精度')) widget2.layout().addWidget(self.MlineEdit_level) widget2.layout().addSpacing(100) self.tab.add_tab(widget2, u'低精度模型') btn_layout = QHBoxLayout() self.btn_ok = MPushButton(text=u'导出').primary() self.btn_ok.setFixedWidth(80) self.btn_cancel = MPushButton(text=u'取消').primary() self.btn_cancel.setFixedWidth(80) btn_layout.addWidget(self.btn_ok) btn_layout.addWidget(self.btn_cancel) main_lay = QVBoxLayout() main_lay.addSpacing(20) main_lay.addWidget(MDivider(u'路径选择')) main_lay.addLayout(lay_1) main_lay.addWidget(MDivider(u'操作选择')) main_lay.addWidget(self.tab) main_lay.addWidget(MDivider(u'')) main_lay.addLayout(btn_layout) main_lay.addSpacing(20) self.setLayout(main_lay) dayu_theme.background_color = "#262626" dayu_theme.apply(self)
def _init_ui(self): main_lay = QVBoxLayout() self.setLayout(main_lay) main_lay.addWidget(MDivider('circle')) lay1 = QHBoxLayout() circle_1 = MProgressCircle(parent=self) circle_1.setFormat(u'%p Days') circle_1.setValue(80) circle_2 = MProgressCircle(parent=self) circle_2.set_dayu_color(dayu_theme.success_color) circle_2.setValue(100) circle_3 = MProgressCircle(parent=self) circle_3.set_dayu_color(dayu_theme.error_color) circle_3.setValue(40) dashboard_1 = MProgressCircle.dashboard(parent=self) dashboard_1.setFormat(u'%p Days') dashboard_1.setValue(80) dashboard_2 = MProgressCircle.dashboard(parent=self) dashboard_2.set_dayu_color(dayu_theme.success_color) dashboard_2.setValue(100) dashboard_3 = MProgressCircle.dashboard(parent=self) dashboard_3.set_dayu_color(dayu_theme.error_color) dashboard_3.setValue(40) lay1.addWidget(circle_1) lay1.addWidget(circle_2) lay1.addWidget(circle_3) dashboard_lay = QHBoxLayout() dashboard_lay.addWidget(dashboard_1) dashboard_lay.addWidget(dashboard_2) dashboard_lay.addWidget(dashboard_3) main_lay.addLayout(lay1) main_lay.addWidget(MDivider('dashboard')) main_lay.addLayout(dashboard_lay) main_lay.addWidget(MDivider('different radius')) circle_4 = MProgressCircle(parent=self) circle_4.set_dayu_width(100) circle_4.setValue(40) circle_5 = MProgressCircle(parent=self) circle_5.setValue(40) circle_6 = MProgressCircle(parent=self) circle_6.set_dayu_width(160) circle_6.setValue(40) lay2 = QHBoxLayout() lay2.addWidget(circle_4) lay2.addWidget(circle_5) lay2.addWidget(circle_6) main_lay.addLayout(lay2) main_lay.addWidget(MDivider('data bind')) self.register_field('percent', 0) self.register_field('color', self.get_color) self.register_field('format', self.get_format) circle = MProgressCircle(parent=self) self.bind('percent', circle, 'value') self.bind('color', circle, 'dayu_color') self.bind('format', circle, 'format') lay3 = QHBoxLayout() button_grp = MPushButtonGroup() button_grp.set_dayu_type(MPushButton.DefaultType) button_grp.set_button_list([ {'text': '+', 'clicked': functools.partial(self.slot_change_percent, 10)}, {'text': '-', 'clicked': functools.partial(self.slot_change_percent, -10)}, ]) lay3.addWidget(circle) lay3.addWidget(button_grp) lay3.addStretch() main_lay.addLayout(lay3) custom_widget = QWidget() custom_layout = QVBoxLayout() custom_layout.setContentsMargins(20, 20, 20, 20) custom_layout.addStretch() custom_widget.setLayout(custom_layout) lab1 = MLabel(text='42,001,776').h3() lab2 = MLabel(text=u'消费人群规模').secondary() lab3 = MLabel(text=u'总占人数 75%').secondary() lab1.setAlignment(Qt.AlignCenter) lab2.setAlignment(Qt.AlignCenter) lab3.setAlignment(Qt.AlignCenter) custom_layout.addWidget(lab1) custom_layout.addWidget(lab2) custom_layout.addWidget(MDivider()) custom_layout.addWidget(lab3) custom_layout.addStretch() custom_circle = MProgressCircle() custom_circle.set_dayu_width(180) custom_circle.setValue(75) custom_circle.set_widget(custom_widget) main_lay.addWidget(MDivider('custom circle')) main_lay.addWidget(custom_circle) main_lay.addStretch()
class MItemViewFullSet(QWidget): sig_double_clicked = Signal(QModelIndex) sig_left_clicked = Signal(QModelIndex) sig_current_changed = Signal(QModelIndex, QModelIndex) sig_current_row_changed = Signal(QModelIndex, QModelIndex) sig_current_column_changed = Signal(QModelIndex, QModelIndex) sig_selection_changed = Signal(QItemSelection, QItemSelection) sig_context_menu = Signal(object) def __init__(self, table_view=True, big_view=False, parent=None): super(MItemViewFullSet, self).__init__(parent) self.sort_filter_model = MSortFilterModel() self.source_model = MTableModel() self.sort_filter_model.setSourceModel(self.source_model) self.stack_widget = QStackedWidget() self.view_button_grp = MToolButtonGroup(exclusive=True) data_group = [] if table_view: self.table_view = MTableView(show_row_count=True) self.table_view.doubleClicked.connect(self.sig_double_clicked) self.table_view.pressed.connect(self.slot_left_clicked) self.table_view.setModel(self.sort_filter_model) self.stack_widget.addWidget(self.table_view) data_group.append({ 'svg': 'table_view.svg', 'checkable': True, 'tooltip': u'Table View' }) if big_view: self.big_view = MBigView() self.big_view.doubleClicked.connect(self.sig_double_clicked) self.big_view.pressed.connect(self.slot_left_clicked) self.big_view.setModel(self.sort_filter_model) self.stack_widget.addWidget(self.big_view) data_group.append({ 'svg': 'big_view.svg', 'checkable': True, 'tooltip': u'Big View' }) # 设置多个view 共享 MItemSelectionModel leader_view = self.stack_widget.widget(0) self.selection_model = leader_view.selectionModel() for index in range(self.stack_widget.count()): if index == 0: continue other_view = self.stack_widget.widget(index) other_view.setSelectionModel(self.selection_model) self.selection_model.currentChanged.connect(self.sig_current_changed) self.selection_model.currentRowChanged.connect( self.sig_current_row_changed) self.selection_model.currentColumnChanged.connect( self.sig_current_column_changed) self.selection_model.selectionChanged.connect( self.sig_selection_changed) self.tool_bar = QWidget() self.top_lay = QHBoxLayout() self.top_lay.setContentsMargins(0, 0, 0, 0) if data_group and len(data_group) > 1: self.view_button_grp.sig_checked_changed.connect( self.stack_widget.setCurrentIndex) self.view_button_grp.set_button_list(data_group) self.view_button_grp.set_dayu_checked(0) self.top_lay.addWidget(self.view_button_grp) self.search_line_edit = MLineEdit().search().small() self.search_attr_button = MToolButton().icon_only().svg( 'down_fill.svg').small() self.search_line_edit.set_prefix_widget(self.search_attr_button) self.search_line_edit.textChanged.connect( self.sort_filter_model.set_search_pattern) self.search_line_edit.setVisible(False) self.top_lay.addStretch() self.top_lay.addWidget(self.search_line_edit) self.tool_bar.setLayout(self.top_lay) self.page_set = MPage() self.main_lay = QVBoxLayout() self.main_lay.setSpacing(5) self.main_lay.setContentsMargins(0, 0, 0, 0) self.main_lay.addWidget(self.tool_bar) self.main_lay.addWidget(self.stack_widget) self.main_lay.addWidget(self.page_set) self.setLayout(self.main_lay) def enable_context_menu(self): for index in range(self.stack_widget.count()): view = self.stack_widget.widget(index) view.enable_context_menu(True) view.sig_context_menu.connect(self.sig_context_menu) def set_no_data_text(self, text): for index in range(self.stack_widget.count()): view = self.stack_widget.widget(index) view.set_no_data_text(text) def set_selection_mode(self, mode): for index in range(self.stack_widget.count()): view = self.stack_widget.widget(index) view.setSelectionMode(mode) def tool_bar_visible(self, flag): self.tool_bar.setVisible(flag) @Slot(QModelIndex) def slot_left_clicked(self, start_index): button = QApplication.mouseButtons() if button == Qt.LeftButton: real_index = self.sort_filter_model.mapToSource(start_index) self.sig_left_clicked.emit(real_index) def set_header_list(self, header_list): self.source_model.set_header_list(header_list) self.sort_filter_model.set_header_list(header_list) self.sort_filter_model.setSourceModel(self.source_model) for index in range(self.stack_widget.count()): view = self.stack_widget.widget(index) view.set_header_list(header_list) def tool_bar_append_widget(self, widget): self.top_lay.addWidget(widget) def tool_bar_insert_widget(self, widget): self.top_lay.insertWidget(0, widget) @Slot() def setup_data(self, data_list): self.source_model.clear() if data_list: self.source_model.set_data_list(data_list) self.set_record_count(len(data_list)) @Slot(int) def set_record_count(self, total): self.page_set.set_total(total) def get_data(self): return self.source_model.get_data_list() def searchable(self): """Enable search line edit visible.""" self.search_line_edit.setVisible(True) return self