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