Example #1
0
    def _init_ui(self):

        self.setWindowModality(Qt.ApplicationModal)
        meta_card_lay = QHBoxLayout()
        meta_card_lay.setSpacing(20)
        for setting in [
            {
                'title':
                u'ZEUS',
                'cover':
                MPixmap(
                    r'C:\Users\huangPeiXin\Documents\houdini17.5\python2.7libs\Zeus_Lin\res\ZeusDesign\zeus.png'
                )
            },
            {
                'title':
                u'IDO',
                'cover':
                MPixmap(
                    r'C:\Users\huangPeiXin\Documents\houdini17.5\python2.7libs\Zeus_Lin\res\ZeusDesign\ido.png'
                )
            },
        ]:
            meta_card = MMeta()
            meta_card.setup_data(setting)
            meta_card_lay.addWidget(meta_card)

        left_lay = QVBoxLayout()

        left_lay.addWidget(MDivider('About Zeus'))
        left_lay.addLayout(meta_card_lay)
        left_lay.addWidget(MDivider(''))
        left_lay.setSpacing(20)
        label_1 = MLabel(u"Zues是由一灯工作室开发的一个软件")
        label_1.setAlignment(Qt.AlignHCenter)
        label_2 = MLabel(u"用于管理CG开发的相关资源")
        label_2.setAlignment(Qt.AlignHCenter)
        left_lay.addWidget(label_1)
        left_lay.addWidget(label_2)
        btn = MPushButton(u"确定")
        btn.clicked.connect(self.close)
        left_lay.addWidget(btn)
        left_lay.addStretch()

        self.setLayout(left_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()
Example #3
0
class MProgressCircle(QProgressBar):
    """
    MProgressCircle: Display the current progress of an operation flow.
    When you need to display the completion percentage of an operation.

    Property:
        dayu_width: int
        dayu_color: str
    """

    def __init__(self, dashboard=False, parent=None):
        super(MProgressCircle, self).__init__(parent)
        self._main_lay = QHBoxLayout()
        self._default_label = MLabel().h3()
        self._default_label.setAlignment(Qt.AlignCenter)
        self._main_lay.addWidget(self._default_label)
        self.setLayout(self._main_lay)
        self._color = None
        self._width = None

        self._start_angle = 90 * 16
        self._max_delta_angle = 360 * 16
        self._height_factor = 1.0
        self._width_factor = 1.0
        if dashboard:
            self._start_angle = 225 * 16
            self._max_delta_angle = 270 * 16
            self._height_factor = (2 + pow(2, 0.5)) / 4 + 0.03

        self.set_dayu_width(120)
        self.set_dayu_color(dayu_theme.primary_color)

    def set_widget(self, widget):
        """
        Set a custom widget to show on the circle's inner center
         and replace the default percent label
        :param widget: QWidget
        :return: None
        """
        self.setTextVisible(False)
        self._main_lay.addWidget(widget)

    def get_dayu_width(self):
        """
        Get current circle fixed width
        :return: int
        """
        return self._width

    def set_dayu_width(self, value):
        """
        Set current circle fixed width
        :param value: int
        :return: None
        """
        self._width = value
        self.setFixedSize(QSize(self._width * self._width_factor,
                                self._width * self._height_factor))

    def get_dayu_color(self):
        """
        Get current circle foreground color
        :return: str
        """
        return self._color

    def set_dayu_color(self, value):
        """
        Set current circle's foreground color
        :param value: str
        :return:
        """
        self._color = value
        self.update()

    dayu_color = Property(str, get_dayu_color, set_dayu_color)
    dayu_width = Property(int, get_dayu_width, set_dayu_width)

    def paintEvent(self, event):
        """Override QProgressBar's paintEvent."""
        if self.text() != self._default_label.text():
            self._default_label.setText(self.text())
        if self.isTextVisible() != self._default_label.isVisible():
            self._default_label.setVisible(self.isTextVisible())

        percent = utils.get_percent(self.value(), self.minimum(), self.maximum())
        total_width = self.get_dayu_width()
        pen_width = int(3 * total_width / 50.0)
        radius = total_width - pen_width - 1

        painter = QPainter(self)
        painter.setRenderHints(QPainter.Antialiasing)

        # draw background circle
        pen_background = QPen()
        pen_background.setWidth(pen_width)
        pen_background.setColor(dayu_theme.background_selected_color)
        pen_background.setCapStyle(Qt.RoundCap)
        painter.setPen(pen_background)
        painter.drawArc(pen_width / 2.0 + 1,
                        pen_width / 2.0 + 1,
                        radius,
                        radius,
                        self._start_angle,
                        -self._max_delta_angle)

        # draw foreground circle
        pen_foreground = QPen()
        pen_foreground.setWidth(pen_width)
        pen_foreground.setColor(self._color)
        pen_foreground.setCapStyle(Qt.RoundCap)
        painter.setPen(pen_foreground)
        painter.drawArc(pen_width / 2.0 + 1,
                        pen_width / 2.0 + 1,
                        radius,
                        radius,
                        self._start_angle,
                        -percent * 0.01 * self._max_delta_angle)
        painter.end()

    @classmethod
    def dashboard(cls, parent=None):
        """Create a dashboard style MCircle"""
        return MProgressCircle(dashboard=True, parent=parent)
Example #4
0
    def __init__(self, text, duration=None, dayu_type=None, parent=None):
        super(MToast, self).__init__(parent)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog
                            | Qt.WA_TranslucentBackground
                            | Qt.WA_DeleteOnClose)
        self.setAttribute(Qt.WA_StyledBackground)

        _icon_lay = QHBoxLayout()
        _icon_lay.addStretch()

        if dayu_type == MToast.LoadingType:
            _icon_lay.addWidget(
                MLoading(size=dayu_theme.huge,
                         color=dayu_theme.text_color_inverse))
        else:
            _icon_label = MAvatar()
            _icon_label.set_dayu_size(60)
            _icon_label.set_dayu_image(
                MPixmap('{}_line.svg'.format(dayu_type or MToast.InfoType),
                        dayu_theme.text_color_inverse))
            _icon_lay.addWidget(_icon_label)
        _icon_lay.addStretch()

        _content_label = MLabel()
        _content_label.setText(text)
        _content_label.setAlignment(Qt.AlignCenter)

        _main_lay = QVBoxLayout()
        _main_lay.setContentsMargins(0, 0, 0, 0)
        _main_lay.addStretch()
        _main_lay.addLayout(_icon_lay)
        _main_lay.addSpacing(10)
        _main_lay.addWidget(_content_label)
        _main_lay.addStretch()
        self.setLayout(_main_lay)
        self.setFixedSize(QSize(120, 120))

        _close_timer = QTimer(self)
        _close_timer.setSingleShot(True)
        _close_timer.timeout.connect(self.close)
        _close_timer.timeout.connect(self.sig_closed)
        _close_timer.setInterval(
            (duration or self.default_config.get('duration')) * 1000)

        _ani_timer = QTimer(self)
        _ani_timer.timeout.connect(self._fade_out)
        _ani_timer.setInterval(
            (duration or self.default_config.get('duration')) * 1000 - 300)

        _close_timer.start()
        _ani_timer.start()

        self._opacity_ani = QPropertyAnimation()
        self._opacity_ani.setTargetObject(self)
        self._opacity_ani.setDuration(300)
        self._opacity_ani.setEasingCurve(QEasingCurve.OutCubic)
        self._opacity_ani.setPropertyName(b'windowOpacity')
        self._opacity_ani.setStartValue(0.0)
        self._opacity_ani.setEndValue(0.9)

        self._get_center_position(parent)
        self._fade_int()
Example #5
0
    def setupUI(self):

        self.setMaximumWidth(Data.getWindowWidth() / 3)

        self.ui = loadUi(file_path + "\\res\\UI\\ParameterWindow.ui")

        self.ui.setParent(self)
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.ui)

        self.widget_1 = self.ui.findChild(QWidget, "widget")
        self.widget_2 = self.ui.findChild(QWidget, "widget_2")
        self.widget_3 = self.ui.findChild(QWidget, "widget_3")
        self.widget_4 = self.ui.findChild(QWidget, "widget_4")
        self.widget_1.setLayout(QVBoxLayout())
        self.widget_2.setLayout(QVBoxLayout())
        self.widget_4.setLayout(QVBoxLayout())
        self.widget_2.layout().setSpacing(8)
        #设置布局

        tab_card = MTabWidget()
        self.label_filePic = MLabel("")
        self.widget_1.setMinimumSize(Data.getWindowHeight() / 2.8,
                                     Data.getWindowHeight() / 2.8)
        tab_card.addTab(self.label_filePic, u'预览图')

        # Todo 加载3d视口
        # self.model_widget = QWidget()
        self.model_widget = CefBrowser(self, url="editor")
        # self.model_widget.setLayout(QVBoxLayout())
        tab_card.addTab(self.model_widget, u'3D视口')

        self.widget_1.layout().addWidget(tab_card)
        self.widget_1.layout().setContentsMargins(0, 0, 0, 0)

        self.widget_2.layout().addWidget(MDivider(u'操作面板'))

        self.let_filename = MLineEdit(text='filename')
        tool_button = MLabel(text=u'文件名').mark().secondary()
        tool_button.setAlignment(Qt.AlignCenter)
        tool_button.setFixedWidth(80)
        self.let_filename.set_prefix_widget(tool_button)
        self.widget_2.layout().addWidget(self.let_filename)

        self.let_path = MLineEdit(text='filepath')
        tool_button_2 = MLabel(text=u'文件地址').mark().secondary()
        tool_button_2.setAlignment(Qt.AlignCenter)
        tool_button_2.setFixedWidth(80)
        self.let_path.set_prefix_widget(tool_button_2)
        self.widget_2.layout().addWidget(self.let_path)
        self.widget_2.layout().addWidget(MLabel(u'标签'))

        self.let_tag = MLineEdit(text='tag')
        self.btn_reviseTag = MPushButton(text=u'修改').primary()
        self.btn_reviseTag.setFixedWidth(80)
        self.let_tag.set_suffix_widget(self.btn_reviseTag)
        self.widget_2.layout().addWidget(self.let_tag)
        self.btn_export = MPushButton(u'导出到houdini').primary()
        self.widget_2.layout().addWidget(self.btn_export)
        self.btn_exportToMaya = MPushButton(u'导出到Maya').primary()
        self.widget_2.layout().addWidget(self.btn_exportToMaya)

        self.timer = QTimer()
        self.timer.setInterval(0.1)
        self.timer.timeout.connect(self.slot_timeout)
        self.auto_color_progress = MProgressBar().auto_color()

        self.widget_2.layout().addWidget(self.auto_color_progress)

        self.widget_4.layout().addWidget(MDivider(u'操作记录'))
        self.setWindowTitle(u"参数面板")

        # #获取控件

        self.tableWidget_operationNote = self.ui.findChild(
            QTableWidget, "tableWidget_operationNote")

        self.tableWidget_operationNote.setStyleSheet(Data.getQSS())
        #设置默认值
        self.let_filename.setReadOnly(True)  #只读
        self.let_path.setReadOnly(True)  #只读
        self.let_tag.setReadOnly(True)  #只读
        self.tableWidget_operationNote.setHorizontalHeaderLabels(
            [u'用户', u'操作', u'时间'])

        # #连接信号与槽
        self.btn_export.clicked.connect(self.slot_run)
        self.btn_reviseTag.clicked.connect(lambda: self.reviseTag())
        # self.tableWidget_operationNote.setColumnCount(3)
        setSectionResizeMode(self.tableWidget_operationNote.horizontalHeader(),
                             QHeaderView.Stretch)  # 自适应
Example #6
0
class MPage(QWidget, MFieldMixin):
    """
    MPage
    A long list can be divided into several pages by MPage,
    and only one page will be loaded at a time.
    """
    sig_page_changed = Signal(int, int)

    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 set_total(self, value):
        """Set page component total count."""
        self.set_field('total', value)
        self.set_field('current_page', 1)

    def _slot_change_current_page(self, offset):
        self.set_field('current_page', self.field('current_page') + offset)
        self._emit_page_changed()

    def set_page_config(self, data_list):
        """Set page component per page settings."""
        self.set_field('page_size_list',
                       [{'label': str(data), 'value': data} if isinstance(data, int) else data for
                        data in data_list])

    def _emit_page_changed(self):
        self.sig_page_changed.emit(self.field('page_size_selected'), self.field('current_page'))
    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)
Example #8
0
    def _init_ui(self):
        main_lay = QtWidgets.QVBoxLayout()
        self.setLayout(main_lay)
        main_lay.addWidget(MDivider("circle"))
        lay1 = QtWidgets.QHBoxLayout()
        circle_1 = MProgressCircle(parent=self)
        circle_1.setFormat("%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("%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 = QtWidgets.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"))

        scale_x, _ = get_scale_factor()
        circle_4 = MProgressCircle(parent=self)
        circle_4.set_dayu_width(100 * scale_x)
        circle_4.setValue(40)
        circle_5 = MProgressCircle(parent=self)
        circle_5.setValue(40)
        circle_6 = MProgressCircle(parent=self)
        circle_6.set_dayu_width(160 * scale_x)
        circle_6.setValue(40)
        lay2 = QtWidgets.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 = QtWidgets.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 = QtWidgets.QWidget()
        custom_layout = QtWidgets.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="消费人群规模").secondary()
        lab3 = MLabel(text="总占人数 75%").secondary()
        lab1.setAlignment(QtCore.Qt.AlignCenter)
        lab2.setAlignment(QtCore.Qt.AlignCenter)
        lab3.setAlignment(QtCore.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 * scale_x)
        custom_circle.setValue(75)
        custom_circle.set_widget(custom_widget)

        main_lay.addWidget(MDivider("custom circle"))
        main_lay.addWidget(custom_circle)
        main_lay.addStretch()
Example #9
0
    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)
Example #10
0
    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)
Example #11
0
    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())
Example #12
0
class editUserWinodw(QWidget):
    """
    编辑用户信息窗口类
    """
    editUser_signal = QtCore.Signal()  #确认头像信号

    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())

    #修改头像
    def editHeadProfile(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()
            imgPath = imgPaths[0]

            self.editHeadProfileWin = headProfieWindow(imgPath)
            self.editHeadProfileWin.show()
            self.editHeadProfileWin.hPOK_signal.connect(
                lambda: self.setPicture())  #选中图片,更新头像
            self.editHeadProfileWin.hPOK_signal.connect(lambda: self.setWCHP())

    #设置头像图片
    def setPicture(self):
        pixmap = QtGui.QPixmap(file_path + r"\res\headPortrial\buffer.jpg")
        self.label_headProfile.setPixmap(pixmap)

    def ok(self):
        # 保存头像
        if self.wchp:
            saveHeadPorfile(self.username,
                            file_path + r"\res\headPortrial\buffer.jpg")
        if self.wcpw:
            self.setPassword()
            self.saveChangePasswordNode(self.username)
        if self.wcid:
            colUser = userdb[self.username]
            # 从数据库提取ID
            for x in colUser.find({"_id": "UserID"}, {"UserID": 1}):
                ID = x["UserID"]
            oldD = {"UserID": ID}
            newD = {"$set": {"UserID": self.let_ID.text()}}
            x = colUser.update_many(oldD, newD)
        self.editUser_signal.emit()  #发射确认修改信号
        self.slot_show_message(MMessage.success, (u'成功修改用户信息'))
        self.close()

    def cancel(self):
        self.close()

    def setWCHP(self):
        self.wchp = True

    def changePassword(self):
        self.let_password.setReadOnly(False)
        self.wcpw = True

    def setPassword(self):
        newPassword = self.let_password.text()
        if not newPassword:
            msgBox = QMessageBox()
            msgBox.setText(u'请输入密码!')
            msgBox.exec_()
            return 0
        colUser = userdb[self.username]
        # 从数据库提取密码
        for x in colUser.find({"_id": "Password"}, {"Password": 1}):
            if "Password" in x:
                DBpassword = x["Password"]
        oldD = {"Password": DBpassword}
        newD = {"$set": {"Password": newPassword}}
        x = colUser.update_many(oldD, newD)

    def setID(self):
        self.key = self.let_key.text()
        if self.key == "IDO":
            if self.let_ID.text() == u"普通用户":
                self.let_ID.setText(u"管理员")
            elif self.let_ID.text() == u"管理员":
                self.let_ID.setText(u"普通用户")
            self.wcid = True

    def saveChangePasswordNode(self, username):
        RTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        # 将浏览信息存入用户数据库
        col = userdb[username]
        dict = {"Operation": "ChangePassword", "Time": RTime}
        col.insert_one(dict)

    # def changeUsername(self):
    #     self.let_username.setReadOnly(False)
    #     self.wcun = True

    # def setUsername(self):
    #     newname = self.let_username.text()
    #     collist = userdb.list_collection_names()
    #     if newname in collist:
    #         print("The username already exists")
    #         return 0

    # 弹出信息提示窗口
    def slot_show_message(self, func, config):
        func(config, parent=self)
Example #13
0
class headProfieWindow(QWidget):
    """
    头像编辑窗口
    """
    hPOK_signal = QtCore.Signal()  #确认头像信号

    def __init__(self, imgPath):
        super(headProfieWindow, self).__init__()
        # 加载ui,并设置ui界面
        #self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")
        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle(u"头像编辑器")

        # self.ui = loadUi(file_path + r"\res\UI\HeadProfileWindow.ui")

        # self.ui.setParent(self)

        self.imgPath = imgPath
        self.setLayout(QVBoxLayout())
        self.label_view = MLabel()
        self.label_view.setAlignment(Qt.AlignCenter)
        self.layout().addWidget(self.label_view)

        self.layout().addWidget(MDivider(u'缩放'))
        self.hSlider_scale = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_scale)

        self.layout().addWidget(MDivider(u'垂直位移'))
        self.hSlider_moveH = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveH)

        self.layout().addWidget(MDivider(u'水平位移'))
        self.hSlider_moveV = MSlider(Qt.Horizontal)
        self.layout().addWidget(self.hSlider_moveV)
        self.layout().addStretch()

        self.btn_save_image = MPushButton(u'保存图片').large().primary()
        self.layout().addWidget(self.btn_save_image)

        dayu_theme.apply(self)
        self.setMinimumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.setMaximumSize(Data.getWindowWidth() / 4.5,
                            Data.getWindowHeight() / 1.7)
        self.layout().setContentsMargins(20, 40, 20, 40)
        Data.setWindowCenter(self)

        self.hSlider_scale.setRange(0, 100)
        self.hSlider_moveH.setRange(0, 100)
        self.hSlider_moveV.setRange(0, 100)
        self.hSlider_scale.setValue(0)  #初始值
        self.hSlider_moveH.setValue(50)
        self.hSlider_moveV.setValue(50)

        #原图大小
        img = cv2.imread(self.imgPath)
        self.oiX = img.shape[0]
        self.oiY = img.shape[1]

        #获取初始值
        self.scale = self.hSlider_scale.value()
        self.mh = self.hSlider_moveH.value()
        self.mv = self.hSlider_moveV.value()

        #设置初始头像
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

        # #链接信号与槽
        self.hSlider_scale.valueChanged.connect(lambda: self.scaleEdit())
        self.hSlider_moveH.valueChanged.connect(lambda: self.moveHEdit())
        self.hSlider_moveV.valueChanged.connect(lambda: self.moveVEdit())
        self.btn_save_image.clicked.connect(lambda: self.ok())

    def editPicture(self, sn, mhn, mvn):

        img = cv2.imread(self.imgPath)  #每一次都是用原图编辑
        flag = min(img.shape[0], img.shape[1])

        sx = (flag - 150) * 0.01 * sn  #缩放的变化量
        hn = (img.shape[0] - 150) * 0.01 * (mhn - 50) * 0.01 * sn  #水平移动变化量
        vn = (img.shape[1] - 150) * 0.01 * (mvn - 50) * 0.01 * sn  #垂直移动变化量

        if (((img.shape[0] - flag) + sx + hn) // 2) < 0 or ((
            (img.shape[1] - flag) + sx) // 2) < 0:
            newimg = img[(int((img.shape[0] - flag) + sx) //
                          2):(int((img.shape[0] + flag) - sx) // 2),
                         (int((img.shape[1] - flag) + sx) //
                          2):(int((img.shape[1] + flag) - sx) // 2)]
        else:
            newimg = img[(int((img.shape[0] - flag) + sx + hn) //
                          2):(int((img.shape[0] + flag) - sx + hn) // 2),
                         (int((img.shape[1] - flag) + sx + vn) //
                          2):(int((img.shape[1] + flag) - sx + vn) // 2)]

        # newimg = img[(int((img.shape[0] - flag) + sx) // 2): (int((img.shape[0] + flag) - sx) // 2),
        #          (int((img.shape[1] - flag) + sx) // 2):(int((img.shape[1] + flag) - sx) // 2)]

        newimg = cv2.resize(newimg, (150, 150), interpolation=cv2.INTER_AREA)
        cv2.imwrite(hpPath + "\\" + "buffer.jpg", newimg)  # 将图片作为缓存存入指定文件内

    def setPicteruView(self):
        imgPath = hpPath + "\\" + "buffer.jpg"
        pixmap = QtGui.QPixmap(imgPath)
        self.label_view.setPixmap(pixmap)

    def scaleEdit(self):
        self.scale = self.hSlider_scale.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def moveHEdit(self):
        self.mh = self.hSlider_moveH.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def moveVEdit(self):
        self.mv = self.hSlider_moveV.value()
        self.editPicture(self.scale, self.mh, self.mv)
        self.setPicteruView()

    def ok(self):
        self.hPOK_signal.emit()
        self.close()
Example #14
0
class MPage(QtWidgets.QWidget, MFieldMixin):
    """
    MPage
    A long list can be divided into several pages by MPage,
    and only one page will be loaded at a time.
    """

    sig_page_changed = QtCore.Signal(int, int)

    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)

    def set_total(self, value):
        """Set page component total count."""
        self.set_field("total", value)
        self.set_field("current_page", 1)

    def _slot_change_current_page(self, offset):
        self.set_field("current_page", self.field("current_page") + offset)
        self._emit_page_changed()

    def set_page_config(self, data_list):
        """Set page component per page settings."""
        self.set_field(
            "page_size_list",
            [{
                "label": str(data),
                "value": data
            } if isinstance(data, int) else data for data in data_list],
        )

    def _emit_page_changed(self):
        self.sig_page_changed.emit(self.field("page_size_selected"),
                                   self.field("current_page"))