예제 #1
0
    def __init__(self, parent=None):
        super(SliderWidget, self).__init__(parent)
        self.setupUi(self)

        # ui_file = os.path.join(__file__,"..","slider.ui")
        # loadUi(ui_file,self)

        # NOTE 使用运算符 禁用双向绑定
        self.Min_SP.setValue(lambda: self.state.min_value * 1)
        self.Min_SP.editingFinished.connect(
            lambda: self.state.min_value >> Set(self.Min_SP.value()))
        self.Min_Slider.setValue(lambda: self.state.min_value * 1000)
        self.Min_Slider.valueChanged.connect(self.state.min_slider_change)

        self.Max_SP.setValue(lambda: self.state.max_value * 1)
        self.Max_SP.editingFinished.connect(
            lambda: self.state.max_value >> Set(self.Max_SP.value()))
        self.Max_Slider.setValue(lambda: self.state.max_value * 1000)
        self.Max_Slider.valueChanged.connect(self.state.max_slider_change)

        self.Vis_BTN.clicked.connect(self.state.toggle_visible)
        self.Min_Label.setVisible(lambda: self.state.visible)
        self.Max_Label.setVisible(lambda: self.state.visible)
        self.Min_Label.setText(lambda: "Max Value: %s" % self.state.min_value)
        self.Max_Label.setText(lambda: "Min Value: %s" % self.state.max_value)
예제 #2
0
    def initialize(self):
        layout = QtWidgets.QVBoxLayout()
        self.setLayout(layout)

        self.edit = QtWidgets.QLineEdit()
        self.label = QtWidgets.QLabel()
        layout.addWidget(self.edit)
        layout.addWidget(self.label)

        self.edit.setText(lambda: self.state.text)
        self.label.setText(lambda: "message is %s" % self.state.text)
        
        event_hook.add_hook(self.edit,QtCore.QEvent.FocusIn,lambda:self.state.color >> Set("red"))
        event_hook.add_hook(self.edit,QtCore.QEvent.FocusOut,lambda:self.state.color >> Set("black"))
        self.label.setStyleSheet(lambda:"color:%s" % self.state.color)

        self.spin = QtWidgets.QSpinBox(self)
        self.label = QtWidgets.QLabel()
        layout.addWidget(self.spin)
        layout.addWidget(self.label)
        self.spin.setValue(lambda: self.state.num)
        self.label.setText(lambda: "num is %s" % self.state.num)
        
        self.spin >> event_hook("HoverEnter",lambda:self.state.spin_color >> Set("pink"))
        self.spin >> event_hook("HoverLeave",lambda:self.state.spin_color >> Set("blue"))
        self.label.setStyleSheet(lambda:"color:%s" % self.state.spin_color)
예제 #3
0
    def progress_initialize(self):
        progress_binder = ProgressBinder()

        self.Progress_SB.setValue(lambda: progress_binder.progress * 1)
        self.Progress_SB.editingFinished.connect(
            lambda: progress_binder.progress >> Set(self.Progress_SB.value())
        )
        self.Progress_Slider.setValue(lambda: progress_binder.progress)
        self.ProgressBar.setValue(lambda: progress_binder.progress)

        self.Time_SB.setValue(lambda: progress_binder.timeout * 1)
        self.Time_SB.editingFinished.connect(
            lambda: progress_binder.timeout >> Set(self.Time_SB.value())
        )
        self.Step_SB.setValue(lambda: progress_binder.step * 1)
        self.Step_SB.editingFinished.connect(
            lambda: progress_binder.step >> Set(self.Step_SB.value())
        )

        timer = QtCore.QTimer(self)
        timer.setInterval(lambda: progress_binder.timeout)
        timer.timeout.connect(progress_binder.progress_increment)
        self.ProgressStart_BTN.clicked.connect(progress_binder.progress_increment)

        self.ProgressStart_BTN.clicked.connect(
            lambda: progress_binder.start_flag >> Set(True)
        )
        self.ProgressStop_BTN.clicked.connect(
            lambda: progress_binder.start_flag >> Set(False)
        )
        progress_binder["start_flag"].connect(
            lambda: timer.start() if progress_binder.start_flag else timer.stop()
        )
예제 #4
0
    def __init__(self):
        super(TodoWidget, self).__init__()
        ui_file = os.path.join(__file__, "..", "todo.ui")
        loadUi(ui_file, self)
        self.state = Binder()
        self.state.clear_text_style = "none"

        self.TodoHeader.setStyleSheet(
            lambda: "#TodoHeader { border-bottom:%spx solid lightgray; }"
            % (gstate.header_border)
        )
        self.TodoInput.setText(lambda: gstate.input)
        self.TodoInput.setStyleSheet(lambda: "font-style:%s" % (gstate.input_font))
        self.TodoInput.textChanged.connect(self.input_change)
        self.TodoInput.returnPressed.connect(self.add_item)
        self.TodoFooter.setVisible(lambda: gstate.footer_visible)
        self.TodoList.setVisible(lambda: gstate.todolist_visible)

        # NOTE add hover effect
        self.effect = QtWidgets.QGraphicsDropShadowEffect()
        self.effect.setBlurRadius(40)
        self.effect.setColor(QtGui.QColor("lightgray"))
        self.TodoContainer.setGraphicsEffect(self.effect)

        self.ItemClear.linkActivated.connect(self.clear_items)
        self.ItemClear.setText(
            lambda: '<html><head/><body><p><a href="clear" style="text-decoration: %s;color:gray">Clear completed</a></p></body></html>'
            % self.state.clear_text_style
        )
        self.ItemClear >> event_hook(
            "Enter", lambda: self.state.clear_text_style >> Set("underline")
        )
        self.ItemClear >> event_hook(
            "Leave", lambda: self.state.clear_text_style >> Set("none")
        )

        self.ItemComplted.linkActivated.connect(self.complete_items)
        self.ItemComplted.setText(
            lambda: '<html><head/><body><a href="complted" style="text-decoration:none;color:%s">﹀</p></body></html>'
            % gstate.completed_color
        )
        gstate["item_count"].connect(self.change_completed_color)

        self.ItemCount.setText(lambda: "%s item left" % gstate.item_count)

        # NOTE filter radiobutton handler
        gstate.selected >> GroupBoxBind(self.StateGroup)

        gstate["selected"].connect(self.update_item)
        gstate["todo_data"].connect(self.update_item)
        self.update_item()
예제 #5
0
    def validate_mail(self):
        mail = self.state.mail
        if not mail:
            return
        reg = r"\A(?P<name>[\w\-_]+)@(?P<domain>[\w\-_]+).(?P<toplevel>[\w]+)\Z"
        match = re.match(reg, mail, re.IGNORECASE)
        if not match:
            self.state.mail = ""
            self.state.invalid = True

        self.state.color = "green" if match else "red"
        QtCore.QTimer.singleShot(
            2000,
            lambda: self.state.color >> Set("transparent")
            if match
            else (
                self.state.invalid >> Set(False),
                self.state.color >> Set("transparent"),
            ),
        )
예제 #6
0
    def __init__(self, parent=None):
        super(SliderWidget, self).__init__(parent)
        self.setupUi(self)

        # NOTE 使用运算符 禁用双向绑定
        self.Min_SP.setValue(lambda: self.state.min_value * 1)
        self.Min_SP.editingFinished.connect(
            lambda: self.state.min_value >> Set(self.Min_SP.value()))
        self.Min_Slider.setValue(lambda: self.state.min_value * 1000)
        self.Min_Slider.valueChanged.connect(self.state.min_slider_change)

        self.Max_SP.setValue(lambda: self.state.max_value * 1)
        self.Max_SP.editingFinished.connect(
            lambda: self.state.max_value >> Set(self.Max_SP.value()))
        self.Max_Slider.setValue(lambda: self.state.max_value * 1000)
        self.Max_Slider.valueChanged.connect(self.state.max_slider_change)

        self.Vis_BTN.clicked.connect(self.state.toggle_visible)
        self.Min_Label.setVisible(lambda: self.state.visible)
        self.Max_Label.setVisible(lambda: self.state.visible)
        self.Min_Label.setText(lambda: "最小值: %s" % self.state.min_value)
        self.Max_Label.setText(lambda: "最大值: %s" % self.state.max_value)
예제 #7
0
    def __init__(self, parent=None):
        super(StyleWidget, self).__init__(parent)
        try:
            self.state = StyleSheetBinder()
        except Exception as e:
            import traceback

            traceback.print_exc()
            raise e
        # self.setupUi(self)

        ui_file = os.path.join(__file__, "..", "stylesheet.ui")
        loadUi(ui_file, self)

        self.RGB_Label.setStyleSheet(lambda: "background:rgb(%s,%s,%s)" % (
            self.state.r, self.state.g, self.state.b))
        self.R_SP.setValue(lambda: self.state.r)
        self.G_SP.setValue(lambda: self.state.g)
        self.B_SP.setValue(lambda: self.state.b)
        self.R_Slider.setValue(lambda: self.state.r)
        self.G_Slider.setValue(lambda: self.state.g)
        self.B_Slider.setValue(lambda: self.state.b)

        # NOTE Animation Color
        self.Red_BTN.clicked.connect(self.state.to_red)
        self.Green_BTN.clicked.connect(self.state.to_green)
        self.Blue_BTN.clicked.connect(self.state.to_blue)

        self.HSV_Label.setStyleSheet(lambda: "background:hsl(%s,%s,%s)" % (
            self.state.h, self.state.s, self.state.v))
        self.H_SP.setValue(lambda: self.state.h)
        self.S_SP.setValue(lambda: self.state.s)
        self.V_SP.setValue(lambda: self.state.v)
        self.H_Slider.setValue(lambda: self.state.h)
        self.S_Slider.setValue(lambda: self.state.s)
        self.V_Slider.setValue(lambda: self.state.v)

        self.Font_Label.setStyleSheet(lambda: u"""
            font-family: {family};
            font-size: {size}pt;
            font-style: {style};
            font-weight: {weight};
            text-decoration: {decoration};
            """.format(
            family=self.state.family,
            size=self.state.font_size,
            decoration=self.state.decoration,
            style=u"italic" if self.state.italic else u"none",
            weight=u"bold" if self.state.bold else u"none",
        ))
        self.Font_Label.setText(lambda: self.state.text)
        self.Fone_LE.setText(lambda: self.state.text)

        self.Font_Combo.currentFontChanged.connect(
            lambda f: self.state.family >> Set(f.family()))
        self.Font_Size_SP.setValue(lambda: self.state.font_size)

        self.Font_Bold_CB.setChecked(lambda: self.state.bold)
        self.Font_Italic_CB.setChecked(lambda: self.state.italic)
        self.Font_Underline_CB.setChecked(lambda: self.state.underline)
        self.Font_LineThrough_CB.setChecked(lambda: self.state.through)
예제 #8
0
    def rainbow_initialize(self):
        rainbow_binder = RainbowBinder()
        self.Rainbow_Label.setStyleSheet(
            lambda: """
            background: qlineargradient(spread: pad,
                x1: 0,
                y1: 0,
                x2: 1,
                y2: 0,
                stop: 0.000 rgb{c0},
                stop: 0.166 rgb{c1},
                stop: 0.333 rgb{c2},
                stop: 0.500 rgb{c3},
                stop: 0.666 rgb{c4},
                stop: 0.833 rgb{c5},
                stop: 1.000 rgb{c6}
            );
        """.format(
                c0=tuple(rainbow_binder.c0),
                c1=tuple(rainbow_binder.c1),
                c2=tuple(rainbow_binder.c2),
                c3=tuple(rainbow_binder.c3),
                c4=tuple(rainbow_binder.c4),
                c5=tuple(rainbow_binder.c5),
                c6=tuple(rainbow_binder.c6),
            )
        )

        def anim_color_channel(i):
            R_SB = getattr(self, "C%sR_SB" % i)
            R_SB.setValue(lambda: getattr(rainbow_binder, "c%s" % i)[0] * 1)
            R_SB.editingFinished.connect(
                lambda: getattr(rainbow_binder, "c%s" % i)
                >> Anim(
                    [
                        R_SB.value(),
                        getattr(rainbow_binder, "c%s" % i)[1],
                        getattr(rainbow_binder, "c%s" % i)[2],
                    ]
                )
            )
            G_SB = getattr(self, "C%sG_SB" % i)
            G_SB.setValue(lambda: getattr(rainbow_binder, "c%s" % i)[1] * 1)
            G_SB.editingFinished.connect(
                lambda: getattr(rainbow_binder, "c%s" % i)
                >> Anim(
                    [
                        getattr(rainbow_binder, "c%s" % i)[0],
                        G_SB.value(),
                        getattr(rainbow_binder, "c%s" % i)[2],
                    ]
                )
            )
            B_SB = getattr(self, "C%sB_SB" % i)
            B_SB.setValue(lambda: getattr(rainbow_binder, "c%s" % i)[2] * 1)
            B_SB.editingFinished.connect(
                lambda: getattr(rainbow_binder, "c%s" % i)
                >> Anim(
                    [
                        getattr(rainbow_binder, "c%s" % i)[0],
                        getattr(rainbow_binder, "c%s" % i)[1],
                        B_SB.value(),
                    ]
                )
            )

        for i in range(7):
            anim_color_channel(i)

        self.Color_Frame.setFixedHeight(lambda: rainbow_binder.height)
        self.ColorInfo_BTN.clicked.connect(
            lambda: rainbow_binder.height
            >> Anim(
                0 if rainbow_binder.height else self.Color_Frame.sizeHint().height()
            )
        )

        rainbow_binder["height"].connect(
            lambda: self.Color_Frame.setVisible(bool(rainbow_binder.height))
        )

        self.ColorIncrement_BTN.clicked.connect(rainbow_binder.rainbow_increment)
        self.ColorDecrement_BTN.clicked.connect(rainbow_binder.rainbow_decrement)

        timer = QtCore.QTimer(self)
        timer.setInterval(1000)
        timer.timeout.connect(rainbow_binder.rainbow_increment)
        self.AnimStart_BTN.clicked.connect(rainbow_binder.rainbow_increment)
        self.AnimStart_BTN.clicked.connect(
            lambda: rainbow_binder.start_flag >> Set(True)
        )
        self.AnimStop_BTN.clicked.connect(
            lambda: rainbow_binder.start_flag >> Set(False)
        )
        rainbow_binder["start_flag"].connect(
            lambda: timer.start() if rainbow_binder.start_flag else timer.stop()
        )