def interface(): def update_task(task): set_usb_voltage(power.getVbusVoltage()) set_usb_pwr(power.getVbusCurrent()) if power.isBatteryConnect(): set_batt_voltage(power.getBattVoltage()) if power.isChargeing(): set_batt_pwr("Charging", power.getBattChargeCurrent()) batt_percent.set_hidden(True) else: set_batt_pwr("Discharging", power.getBattDischargeCurrent()) set_batt_per(power.getBattPercentage()) batt_percent.set_hidden(False) def event_cb(obj, event): if event == lv.EVENT.VALUE_CHANGED: tft.set_backlight_level(obj.get_value()) def set_usb_pwr(pwr): usb_pwr.set_text("USB current: {} mA".format(pwr)) def set_usb_voltage(volts): usb_voltage.set_text("USB voltage: {} mV".format(volts)) def set_batt_voltage(volts): batt_voltage.set_text("Battery voltage: {} mV".format(volts)) def set_batt_pwr(mode, pwr): batt_pwr.set_text("{} battery \ncurrent: {} mA".format(mode, pwr)) def set_batt_per(per): batt_percent.set_text("Battery percent: {}%".format(per)) scr = lv.obj() tabview = lv.tabview(scr) vbus_tab = tabview.add_tab("USB") usb_voltage = lv.label(vbus_tab) usb_pwr = lv.label(vbus_tab) usb_pwr.set_y(usb_voltage.get_y() + 20) la = lv.switch(vbus_tab) batt_tab = tabview.add_tab("Battery") batt_voltage = lv.label(batt_tab) batt_pwr = lv.label(batt_tab) batt_pwr.set_y(batt_voltage.get_y() + 20) batt_percent = lv.label(batt_tab) batt_percent.set_y(batt_pwr.get_y() + 40) brightness_slider = lv.slider(batt_tab) brightness_slider.align(None, lv.ALIGN.IN_BOTTOM_MID, 0, 0) brightness_slider.set_range(0, 100) brightness_slider.set_value(100, 1) brightness_slider.set_event_cb(event_cb) update_task(None) lv.scr_load(scr) watch.tft.backlight_fade(100) lv.task_create(update_task, 1000, 5, None)
def widget_new(type, parm = None): config = sys.modules['llvgl'].config content = config["win"].get_content() lv_obj = None if type == TYPE.LABEL: lv_obj = lv.label(content) elif type == TYPE.BUTTON: lv_obj = lv.btn(content) # buttons don't scale with the content by default lv_obj.set_fit(lv.FIT.TIGHT) # MAX, NONE, PARENT, TIGHT elif type == TYPE.SWITCH: lv_obj = lv.switch(content) elif type == TYPE.SLIDER: lv_obj = lv.slider(content) # sliders default width is too wide for the 240x320 screen lv_obj.set_width(180) elif type == TYPE.CHECKBOX: lv_obj = lv.checkbox(content) elif type == TYPE.LED: lv_obj = lv.led(content) # leds default size is a little big for the 240x320 screen lv_obj.set_size(30,30) elif type == TYPE.GAUGE: lv_obj = lv.gauge(content) elif type == TYPE.CHART: lv_obj = lv.chart(content) # leds default size is a little big for the 240x320 screen lv_obj.set_size(180,180) elif type == TYPE.DROPDOWN: lv_obj = lv.dropdown(content) else: print("Unknown type:", type); return None # add new object to internal list obj = { "lv_obj": lv_obj, "type": type } config["objects"].append(obj) # set optional parameter if widget support if type == TYPE.LABEL or type == TYPE.BUTTON or type == TYPE.CHECKBOX: widget_set_text(obj, parm) elif type == TYPE.SWITCH or type == TYPE.LED or type == TYPE.SLIDER: widget_set_value(obj, parm) # install default event handler lv_obj.set_event_cb(lambda o, e: on_event(obj, e)) return obj
def setup_page(self,tile_num): example_setup_tile = self.mainbar.get_tile_obj(tile_num) setup_style = lv.style_t() setup_style.copy(self.mainbar.get_style()) setup_style.set_bg_color(lv.obj.PART.MAIN, lv_colors.GRAY) setup_style.set_bg_opa(lv.obj.PART.MAIN, lv.OPA.COVER) setup_style.set_border_width(lv.obj.PART.MAIN, 0) example_setup_tile.add_style(lv.obj.PART.MAIN, setup_style) exit_cont = lv.obj(example_setup_tile,None) exit_cont.set_size(lv.scr_act().get_disp().driver.hor_res,40) exit_cont.add_style(lv.obj.PART.MAIN, setup_style) exit_btn = lv.imgbtn(example_setup_tile,None) exit_btn.set_src(lv.btn.STATE.RELEASED,self.mainbar.get_exit_btn_dsc()) exit_btn.set_src(lv.btn.STATE.PRESSED,self.mainbar.get_exit_btn_dsc()) exit_btn.set_src(lv.btn.STATE.CHECKED_RELEASED,self.mainbar.get_exit_btn_dsc()) exit_btn.set_src(lv.btn.STATE.CHECKED_PRESSED,self.mainbar.get_exit_btn_dsc()) exit_btn.align(exit_cont,lv.ALIGN.IN_TOP_LEFT, 10, 0) exit_btn.set_event_cb(self.exit_example_app_setup_event_cb) exit_label = lv.label(exit_cont,None) exit_label.add_style(lv.obj.PART.MAIN, setup_style) exit_label.set_text("my app setup") exit_label.align(exit_btn, lv.ALIGN.OUT_RIGHT_MID, 5, 0 ) foobar_switch_cont = lv.obj(example_setup_tile,None) foobar_switch_cont.set_size(lv.scr_act().get_disp().driver.hor_res,40) foobar_switch_cont.add_style(lv.obj.PART.MAIN, setup_style) foobar_switch_cont.align(exit_cont,lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0 ) foobar_switch = lv.switch(foobar_switch_cont,None) foobar_switch.add_protect(lv.PROTECT.CLICK_FOCUS) foobar_switch.add_style(lv.switch.PART.INDIC, setup_style) foobar_switch.off(lv.ANIM.ON) foobar_switch.align(foobar_switch_cont,lv.ALIGN.IN_RIGHT_MID, -5, 0 ) self.log.debug("setting up the foobar switch callback") foobar_switch.set_event_cb(self.example_app_foobar_switch_event_cb) foobar_switch_label = lv.label(foobar_switch_cont,None) foobar_switch_label.add_style(lv.obj.PART.MAIN, setup_style) foobar_switch_label.set_text("foo bar") foobar_switch_label.align(foobar_switch_cont,lv.ALIGN.IN_LEFT_MID, 5, 0 )
def m4(): scr = lv.obj() lv.scr_load(scr) #container for drop and switch cont = lv.cont(scr) cont.set_auto_realign(True) cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) cont.set_layout(lv.LAYOUT.PRETTY_MID) cont.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0) #dropdown drop = lv.dropdown(cont) drop.set_style_local_border_post(lv.BORDER_SIDE.NONE, lv.BORDER_SIDE.NONE, lv.BORDER_SIDE.NONE) drop.set_options( "Trigger 1\nTrigger 2\nTrigger 3\nTrigger 4\nTrigger 5\nTrigger 6\nTrigger 7\nTrigger 8\nTrigger 9\n Trigger 10" ) #label lbl1 = lv.label(cont) lbl1.set_text("Arm?") #switch switch = lv.switch(cont) #tabview tab = lv.tabview(scr) tab.align(cont, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) tab1 = tab.add_tab("Time") tab2 = tab.add_tab("Auto") tab3 = tab.add_tab("Switches") #tab1 lbl2 = lv.label(tab1) lbl2.set_text("Start time [h][m][s]") lbl2.align(tab1, lv.ALIGN.IN_TOP_MID, 0, 0) trig_btn = lv.btnmatrix(tab1) trig_btn.set_height(200) trig_btn.align(lbl2, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) def remap(): btn_map = [ lv.SYMBOL.UP, lv.SYMBOL.UP, lv.SYMBOL.UP, "\n", str(trigger[0].bhour), str(trigger[0].bminute), str(trigger[0].bsecond), "\n", lv.SYMBOL.DOWN, lv.SYMBOL.DOWN, lv.SYMBOL.DOWN, "\n", lv.SYMBOL.SAVE, "", "" ] print('remapped called') return btn_map trig_btn.set_map(remap()) #trig_btn.set_style def event_handler(obj, event): if event == lv.EVENT.VALUE_CHANGED: txt = obj.get_active_btn() print("{} was pressed".format(txt)) if (txt == 0): trigger[0].bhour += 1 if (txt == 1): trigger[0].bminute += 1 if (txt == 2): trigger[0].bsecond += 1 if (txt == 6): trigger[0].bhour -= 1 if (txt == 7): trigger[0].bminute -= 1 if (txt == 8): trigger[0].bsecond -= 1 trig_btn.set_map(remap()) trig_btn.set_event_cb(event_handler) #label set duration lbl3 = lv.label(tab1) lbl3.align(trig_btn, lv.ALIGN.OUT_BOTTOM_MID, -100, 0) lbl3.set_text("Set trigger duration [h][m][s]") roller = lv.roller(tab1)
def controls_create(parent): lv.page.set_scrl_layout(lv.page.__cast__(parent), lv.LAYOUT.PRETTY_TOP) if LV_DEMO_WIDGETS_SLIDESHOW == 0: btns = ["Cancel", "Ok", ""] m = lv.msgbox(lv.scr_act(), None) m.add_btns(btns) btnm = lv.btnmatrix.__cast__(m.get_btnmatrix()) # print("type(btnm): ",type(btnm)) btnm.set_btn_ctrl(1, lv.btnmatrix.CTRL.CHECK_STATE) h = lv.cont(parent, None) h.set_layout(lv.LAYOUT.PRETTY_MID) h.add_style(lv.cont.PART.MAIN, style_box) h.set_drag_parent(True) h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Basics") disp_size = display.get_size_category() if disp_size <= lv.DISP_SIZE.SMALL: grid_w = lv.page.get_width_grid(lv.page.__cast__(parent), 1, 1) # print("grid_w: ",grid_w) else: grid_w = lv.page.get_width_grid(lv.page.__cast__(parent), 2, 1) # print("grid_w: ",grid_w) h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) h.set_width(grid_w) btn = lv.btn(h, None) btn.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) if disp_size <= lv.DISP_SIZE.SMALL: button_width = h.get_width_grid(1, 1) else: button_width = h.get_width_grid(2, 1) # print("button_width: %d"%button_width) btn.set_width(button_width) label = lv.label(btn, None) label.set_text("Button") btn = lv.btn(h, btn) btn.toggle() label = lv.label(btn, None) label.set_text("Button") lv.switch(h, None) lv.checkbox(h, None) fit_w = h.get_width_fit() slider = lv.slider(h, None) slider.set_value(40, lv.ANIM.OFF) slider.set_event_cb(slider_event_cb) slider.set_width_margin(fit_w) # Use the knobs style value the display the current value in focused state slider.set_style_local_margin_top(lv.slider.PART.BG, lv.STATE.DEFAULT, LV_DPX(25)) slider.set_style_local_value_font(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.theme_get_font_small()) slider.set_style_local_value_ofs_y(lv.slider.PART.KNOB, lv.STATE.FOCUSED, -LV_DPX(25)) slider.set_style_local_value_opa(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.OPA.TRANSP) slider.set_style_local_value_opa(lv.slider.PART.KNOB, lv.STATE.FOCUSED, lv.OPA.COVER) slider.set_style_local_transition_time(lv.slider.PART.KNOB, lv.STATE.DEFAULT, 300) slider.set_style_local_transition_prop_5(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OFS_Y) slider.set_style_local_transition_prop_6(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OPA) slider = lv.slider(h, None) slider.set_type(lv.slider.TYPE.RANGE) slider.set_value(70, lv.ANIM.OFF) slider.set_left_value(30, lv.ANIM.OFF) slider.set_style_local_value_ofs_y(lv.slider.PART.INDIC, lv.STATE.DEFAULT, -LV_DPX(25)) slider.set_style_local_value_font(lv.slider.PART.INDIC, lv.STATE.DEFAULT, lv.theme_get_font_small()) slider.set_style_local_value_opa(lv.slider.PART.INDIC, lv.STATE.DEFAULT, lv.OPA.COVER) slider.set_event_cb(slider_event_cb) lv.event_send(slider, lv.EVENT.VALUE_CHANGED, None) # To refresh the text if slider.get_width() > fit_w: slider.set_width(fit_w) h = lv.cont(parent, h) h.set_fit(lv.FIT.NONE) h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Text input") ta = lv.textarea(h, None) lv.cont.set_fit2(h, lv.FIT.PARENT, lv.FIT.NONE) ta.set_text("") ta.set_placeholder_text("E-mail address") ta.set_one_line(True) ta.set_cursor_hidden(True) #lv_obj_set_event_cb(ta, ta_event_cb); ta = lv.textarea(h, ta) ta.set_pwd_mode(True) ta.set_placeholder_text("Password") ta = lv.textarea(h, None) lv.cont.set_fit2(h, lv.FIT.PARENT, lv.FIT.NONE) ta.set_text("") ta.set_placeholder_text("Message") ta.set_cursor_hidden(True) #lv_obj_set_event_cb(ta, ta_event_cb); lv.cont.set_fit4(h, lv.FIT.PARENT, lv.FIT.PARENT, lv.FIT.NONE, lv.FIT.PARENT)
lv.btn.set_checkable(lv.btn.__cast__(btn), True) # Make a button disabled if i == 4: btn.set_state(lv.btn.STATE.DISABLED) cal.set_highlighted_dates(hl, 2) tv = lv.tabview(lv.scr_act(), None) display = scr.get_disp() disp_size = display.get_size_category() tv.set_style_local_pad_left(lv.tabview.PART.TAB_BG, lv.STATE.DEFAULT, disp_drv.hor_res // 2) sw = lv.switch(lv.scr_act(), None) if lv.theme_get_flags() & lv.THEME_MATERIAL_FLAG.DARK: sw.on(LV_ANIM_OFF) sw.set_event_cb(color_chg_event_cb) sw.set_pos(LV_DPX(10), LV_DPX(10)) sw.set_style_local_value_str(lv.switch.PART.BG, lv.STATE.DEFAULT, "Dark") sw.set_style_local_value_align(lv.switch.PART.BG, lv.STATE.DEFAULT, lv.ALIGN.OUT_RIGHT_MID) sw.set_style_local_value_ofs_x(lv.switch.PART.BG, lv.STATE.DEFAULT, LV_DPI // 35) t1 = tv.add_tab("Controls") t2 = tv.add_tab("Visuals") t3 = tv.add_tab("Selectors") style_box = lv.style_t()
def gui_other_settings(): global scr4, ta, kb def btn_event(task, params): if params == 'cancel': lv.scr_load(scr) elif params['name'] == 'wifi': global ssid global ta e = task.get_code() obj = task.get_target() ssid = obj.get_child(1).get_text() print('Wifi {}'.format(ssid)) wifi_list.add_flag(lv.obj.FLAG.HIDDEN) ta.clear_flag(lv.obj.FLAG.HIDDEN) ta.set_placeholder_text('Insert Password for {}'.format(ssid)) kb.clear_flag(lv.obj.FLAG.HIDDEN) def ta_event_cb(e, kb): code = e.get_code() ta = e.get_target() if code == lv.EVENT.FOCUSED: kb.set_textarea(ta) kb.clear_flag(lv.obj.FLAG.HIDDEN) if code == lv.EVENT.DEFOCUSED: user = ssid password = ta.get_text() sta_if.connect(user, password) print('connecting {} {}'.format(str(user), str(password))) ta.add_flag(lv.obj.FLAG.HIDDEN) kb.add_flag(lv.obj.FLAG.HIDDEN) def keyboard_event(e, ta): code = e.get_code() if code == lv.KEY.ENTER: user = ssid password = ta.get_text() sta_if.connect(user, password) ta.add_flag(lv.obj.FLAG.HIDDEN) kb.add_flag(lv.obj.FLAG.HIDDEN) def switch_handler(event): e = event.get_code() obj = event.get_target() if e == lv.EVENT.VALUE_CHANGED: if obj.has_state(lv.STATE.CHECKED): print('Turn On Wifi') sta_if.active(True) elif obj.has_state(lv.STATE.DISABLED): print('Turn of Wifi') sta_if.active(False) scr4 = lv.obj() lv.scr_load(scr4) btn1 = lv.btn(scr4) btn1.set_size(150, 40) btn1.set_style_bg_color(primary, 0) btn1_label = lv.label(btn1) btn1_label.set_text('Cancel') btn1_label.center() btn1.align_to(scr4, lv.ALIGN.TOP_LEFT, 0, 0) btn1.add_event_cb(lambda task: btn_event(task, 'cancel'), lv.EVENT.CLICKED, None) btn2 = lv.btn(scr4) btn2.set_size(150, 40) btn2.set_style_bg_color(primary, 0) btn2_label = lv.label(btn2) btn2_label.set_text('Save') btn2_label.center() btn2.align_to(scr4, lv.ALIGN.TOP_RIGHT, 0, 0) label1 = lv.label(scr4) label1.set_text('Others settings') label1.align_to(btn1, lv.ALIGN.OUT_BOTTOM_LEFT, 10, 10) label2 = lv.label(scr4) def refresh_label(): label2.set_text('Enable Wifi : Connected? {}'.format( sta_if.isconnected())) lv.timer_create(lambda task: refresh_label(), 800, None) label2.align_to(label1, lv.ALIGN.OUT_BOTTOM_LEFT, 10, 10) switch_wifi = lv.switch(scr4) switch_wifi.align_to(label2, lv.ALIGN.OUT_LEFT_TOP, 290, 0) wifi_data = [] if sta_if.active() == True: switch_wifi.add_state(lv.STATE.CHECKED) wifi_data = sta_if.scan() elif sta_if.active() == False: switch_wifi.add_state(lv.STATE.DISABLED) switch_wifi.add_event_cb(lambda event: switch_handler(event), lv.EVENT.ALL, None) wifi_list = lv.list(scr4) wifi_list.set_size(250, 200) wifi_list.align_to(label2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 15) for wifi in wifi_data: wifi_list.add_btn(lv.SYMBOL.WIFI, str(wifi[0], 'utf-8')) current_item = wifi_list.get_child_cnt() wifi_item = wifi_list.get_child(current_item - 1) wifi_item.add_event_cb( lambda task: btn_event(task, { 'name': 'wifi', 'ssid': str(wifi[0], 'utf-8') }), lv.EVENT.CLICKED, None) ta = lv.textarea(scr4) ta.align_to(label2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) ta.set_size(280, 50) ta.add_event_cb(lambda e: ta_event_cb(e, kb), lv.EVENT.ALL, None) ta.add_flag(lv.obj.FLAG.HIDDEN) kb = lv.keyboard(scr4) kb.align_to(ta, lv.ALIGN.OUT_BOTTOM_LEFT, -10, 10) kb.add_flag(lv.obj.FLAG.HIDDEN) kb.add_event_cb(lambda e: keyboard_event(e, ta), lv.EVENT.KEY, None)
def scan_next_event_cb(self, obj, evt): LV_IMG_ZOOM_NONE = 250 if evt == lv.EVENT.CLICKED: self.anim_out_all(lv.scr_act(), 0) delay = 400 back = self.add_back(self.back_to_home_event_cb) self.anim_in(back, delay) title = self.add_title("ADJUST IMAGE") self.anim_in(title, delay) box_w = 400 self.scan_img.set_pivot(0, 0) self.scan_img.set_antialias(False) a = lv.anim_t() a.init() a.set_var(self.scan_img) a.set_custom_exec_cb( lambda a, val: self.set_zoom(self.scan_img, val)) a.set_values(LV_IMG_ZOOM_NONE, 190) a.set_time(200) a.set_delay(200) lv.anim_t.start(a) # self.scan_img = None # To allow anim out dropdown_box = lv.obj(lv.scr_act(), None) dropdown_box.set_size(box_w, self.LV_VER_RES // 5) dropdown_box.align(None, lv.ALIGN.IN_BOTTOM_LEFT, 40, -20) dropdown = lv.dropdown(dropdown_box, None) dropdown.align(None, lv.ALIGN.IN_LEFT_MID, self.LV_HOR_RES // 60, 0) dropdown.set_max_height(self.LV_VER_RES // 3) dropdown.set_options_static("Best\nNormal\nDraft") dropdown.set_width((box_w - 3 * self.LV_HOR_RES // 60) // 2) self.theme.apply(dropdown, lv.THEME.DROPDOWN) dropdown = lv.dropdown(dropdown_box, dropdown) dropdown.align(None, lv.ALIGN.IN_RIGHT_MID, -self.LV_HOR_RES // 60, 0) dropdown.set_options_static( "72 DPI\n96 DPI\n150 DPI\n300 DPI\n600 DPI\n900 DPI\n1200 DPI") self.theme.apply(dropdown, lv.THEME.DROPDOWN) box_w = 320 - 40 settings_box = lv.obj(lv.scr_act(), None) settings_box.set_size(box_w, self.LV_VER_RES // 2) settings_box.align(None, lv.ALIGN.IN_TOP_RIGHT, -40, 100) numbox = lv.cont(settings_box, None) self.theme.apply(numbox, LV_DEMO_PRINTER_THEME_BOX_BORDER) numbox.set_size(self.LV_HOR_RES // 7, self.LV_HOR_RES // 13) numbox.align(settings_box, lv.ALIGN.IN_TOP_MID, 0, self.LV_VER_RES // 10) numbox.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Copies") numbox.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.ALIGN.OUT_TOP_MID) numbox.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT, -self.LV_VER_RES // 50) numbox.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) numbox.set_layout(lv.LAYOUT.CENTER) self.print_cnt = 1 self.print_cnt_label = lv.label(numbox, None) self.print_cnt_label.set_text("1") self.print_cnt_label.set_style_local_text_font( lv.label.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) btn = lv.btn(settings_box, None) btn.set_size(self.LV_HOR_RES // 13, self.LV_HOR_RES // 13) btn.align(numbox, lv.ALIGN.OUT_LEFT_MID, -self.LV_VER_RES // 60, 0) btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.SYMBOL.DOWN) btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) btn.set_event_cb(self.print_cnt_btn_event_cb) btn.set_ext_click_area(10, 10, 10, 10) self.theme.apply(btn, lv.THEME.BTN) sw = lv.switch(settings_box, None) sw.set_size(self.LV_HOR_RES // 10, self.LV_VER_RES // 12) sw.align(btn, lv.ALIGN.OUT_BOTTOM_LEFT, self.LV_HOR_RES // 50, self.LV_VER_RES // 7) sw.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT, -self.LV_VER_RES // 50) sw.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.ALIGN.OUT_TOP_MID) sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Color") sw.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) self.theme.apply(sw, lv.THEME.SWITCH) btn = lv.btn(settings_box, btn) btn.align(numbox, lv.ALIGN.OUT_RIGHT_MID, self.LV_VER_RES // 60, 0) btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.SYMBOL.UP) btn.set_event_cb(self.print_cnt_btn_event_cb) self.theme.apply(btn, lv.THEME.BTN) sw = lv.switch(settings_box, sw) sw.align(btn, lv.ALIGN.OUT_BOTTOM_RIGHT, -self.LV_HOR_RES // 50, self.LV_VER_RES // 7) sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Vertical") print_btn = lv.btn(lv.scr_act(), None) self.theme.apply(print_btn, LV_DEMO_PRINTER_THEME_BTN_CIRCLE) print_btn.set_size(box_w, 60) print_btn.set_event_cb(self.print_start_event_cb) btn_ofs_y = (dropdown_box.get_height() - print_btn.get_height()) // 2 print_btn.align(settings_box, lv.ALIGN.OUT_BOTTOM_MID, 0, self.LV_HOR_RES // 30 + btn_ofs_y) print_btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "PRINT") print_btn.set_style_local_value_font( lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) print_btn.set_style_local_bg_color(lv.obj.PART.MAIN, lv.STATE.DEFAULT, LV_DEMO_PRINTER_GREEN) print_btn.set_style_local_bg_color( lv.obj.PART.MAIN, lv.STATE.PRESSED, LV_DEMO_PRINTER_GREEN.color_darken(lv.OPA._20)) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(settings_box, delay) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(dropdown_box, delay) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(print_btn, delay) self.anim_bg(0, LV_DEMO_PRINTER_BLUE, self.LV_DEMO_PRINTER_BG_NORMAL)
def usb_icon_event_cb(self, obj, evt): if evt == lv.EVENT.CLICKED: self.anim_out_all(lv.scr_act(), 0) delay = 200 back = self.add_back(self.back_to_print_event_cb) self.anim_in(back, delay) title = self.add_title("PRINTING FROM USB DRIVE") self.anim_in(title, delay) box_w = self.LV_HOR_RES * 5 // 10 list = lv.list(lv.scr_act(), None) list.set_size(box_w, self.LV_VER_RES // 2) list.align(None, lv.ALIGN.IN_TOP_LEFT, self.LV_HOR_RES // 20, self.LV_VER_RES // 5) dummy_file_list = [ "Contract 12.pdf", "Scanned_05_21.pdf", "Photo_132210.jpg", "Photo_232141.jpg", "Photo_091640.jpg", "Photo_124019.jpg", "Photo_232032.jpg", "Photo_232033.jpg", "Photo_232034.jpg", "Monday schedule.pdf", "Email from John.txt", "New file.txt", "Untitled.txt", "Untitled (1).txt", "Gallery_40.jpg", "Gallery_41.jpg", "Gallery_42.jpg", "Gallery_43.jpg", "Gallery_44.jpg" ] for filename in dummy_file_list: btn = lv.btn.__cast__(list.add_btn(lv.SYMBOL.FILE, filename)) btn.set_checkable(True) self.theme.apply(btn, lv.THEME.LIST_BTN) dropdown_box = lv.obj(lv.scr_act(), None) dropdown_box.set_size(box_w, self.LV_VER_RES // 5) dropdown_box.align(list, lv.ALIGN.OUT_BOTTOM_MID, 0, self.LV_HOR_RES // 30) dropdown = lv.dropdown(dropdown_box, None) dropdown.align(None, lv.ALIGN.IN_LEFT_MID, self.LV_HOR_RES // 60, 0) dropdown.set_max_height(self.LV_VER_RES // 3) dropdown.set_options_static("Best\nNormal\nDraft") dropdown.set_width((box_w - 3 * self.LV_HOR_RES // 60) // 2) dropdown.set_ext_click_area(5, 5, 5, 5) self.theme.apply(dropdown, lv.THEME.DROPDOWN) dropdown = lv.dropdown(dropdown_box, dropdown) dropdown.align(None, lv.ALIGN.IN_RIGHT_MID, -self.LV_HOR_RES // 60, 0) # dropdown.set_options_static("100 DPI\n200 DPI\n300 DPI\n400 DPI\n500 DPI\n1500 DPI") dropdown.set_options_static("\n".join([ "100 DPI", "200 DPI", "300 DPI", "400 DPI", "500 DPI", "1500 DPI" ])) self.theme.apply(dropdown, lv.THEME.DROPDOWN) box_w = 320 - 40 settings_box = lv.obj(lv.scr_act(), None) settings_box.set_size(box_w, self.LV_VER_RES // 2) settings_box.align(list, lv.ALIGN.OUT_RIGHT_TOP, self.LV_HOR_RES // 20, 0) self.print_cnt = 1 numbox = lv.cont(settings_box, None) self.theme.apply(numbox, LV_DEMO_PRINTER_THEME_BOX_BORDER) numbox.set_size(self.LV_HOR_RES // 7, self.LV_HOR_RES // 13) numbox.align(settings_box, lv.ALIGN.IN_TOP_MID, 0, self.LV_VER_RES // 10) numbox.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Copies") numbox.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.ALIGN.OUT_TOP_MID) numbox.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT, -self.LV_VER_RES // 50) numbox.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) numbox.set_layout(lv.LAYOUT.CENTER) self.print_cnt_label = lv.label(numbox, None) self.print_cnt_label.set_text("1") self.print_cnt_label.set_style_local_text_font( lv.label.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) btn = lv.btn(settings_box, None) btn.set_size(self.LV_HOR_RES // 13, self.LV_HOR_RES // 13) btn.align(numbox, lv.ALIGN.OUT_LEFT_MID, -self.LV_VER_RES // 60, 0) btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.SYMBOL.DOWN) btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) btn.set_event_cb(self.print_cnt_btn_event_cb) btn.set_ext_click_area(10, 10, 10, 10) self.theme.apply(btn, lv.THEME.BTN) sw = lv.switch(settings_box, None) sw.set_size(self.LV_HOR_RES // 10, self.LV_VER_RES // 12) sw.align(btn, lv.ALIGN.OUT_BOTTOM_LEFT, self.LV_HOR_RES // 50, self.LV_VER_RES // 7) sw.set_style_local_value_ofs_y(lv.obj.PART.MAIN, lv.STATE.DEFAULT, -self.LV_VER_RES // 50) sw.set_style_local_value_align(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.ALIGN.OUT_TOP_MID) sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Color") sw.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) self.theme.apply(sw, lv.THEME.SWITCH) btn = lv.btn(settings_box, btn) btn.align(numbox, lv.ALIGN.OUT_RIGHT_MID, self.LV_VER_RES // 60, 0) btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, lv.SYMBOL.UP) btn.set_style_local_value_font(lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) self.theme.apply(btn, lv.THEME.BTN) btn.set_event_cb(self.print_cnt_btn_event_cb) sw = lv.switch(settings_box, sw) sw.align(btn, lv.ALIGN.OUT_BOTTOM_RIGHT, -self.LV_HOR_RES // 50, self.LV_VER_RES // 7) sw.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "Vertical") self.theme.apply(sw, lv.THEME.SWITCH) print_btn = lv.btn(lv.scr_act(), None) self.theme.apply(print_btn, LV_DEMO_PRINTER_THEME_BTN_CIRCLE) print_btn.set_size(box_w, 60) btn_ofs_y = (dropdown_box.get_height() - print_btn.get_height()) // 2 print_btn.align(settings_box, lv.ALIGN.OUT_BOTTOM_MID, 0, self.LV_HOR_RES // 30 + btn_ofs_y) print_btn.set_style_local_value_str(lv.obj.PART.MAIN, lv.STATE.DEFAULT, "PRINT") print_btn.set_style_local_value_font( lv.obj.PART.MAIN, lv.STATE.DEFAULT, self.theme.get_font_subtitle()) print_btn.set_style_local_bg_color(lv.obj.PART.MAIN, lv.STATE.DEFAULT, LV_DEMO_PRINTER_GREEN) print_btn.set_style_local_bg_color( lv.obj.PART.MAIN, lv.STATE.PRESSED, LV_DEMO_PRINTER_GREEN.color_darken(lv.OPA._20)) print_btn.set_event_cb(self.print_start_event_cb) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(list, delay) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(settings_box, delay) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(dropdown_box, delay) delay += self.LV_DEMO_PRINTER_ANIM_DELAY self.anim_in(print_btn, delay) self.anim_bg(0, LV_DEMO_PRINTER_BLUE, self.LV_DEMO_PRINTER_BG_NORMAL)
def add_new(): '''button events''' def btn_event(obj, param): if param == "Cancel": lv.scr_act().clean() home() if param == "Reset 1": roller1.set_selected(0, lv.ANIM.ON) roller2.set_selected(0, lv.ANIM.ON) roller3.set_selected(0, lv.ANIM.ON) if param == "Set AM 1": roller1.set_selected(6, lv.ANIM.ON) roller2.set_selected(0, lv.ANIM.ON) roller3.set_selected(0, lv.ANIM.ON) if param == "Set PM 1": roller1.set_selected(13, lv.ANIM.ON) roller2.set_selected(0, lv.ANIM.ON) roller3.set_selected(0, lv.ANIM.ON) if param == "Reset 2": roller4.set_selected(0, lv.ANIM.ON) roller5.set_selected(0, lv.ANIM.ON) roller6.set_selected(0, lv.ANIM.ON) if param == "Reset hour": roller4.set_selected(0, lv.ANIM.ON) if param == "Reset minute": roller5.set_selected(0, lv.ANIM.ON) if param == "Save": '''storing settings in DB routine''' print('Debug val') #textarea cannot be empty key = text_area.get_text() if key == "": print('Key cannot be empty') lv.msgbox(lv.scr_act(), "Error", "Tigger name cannot be empty", [], True) #textare cannot be more than 8 char if len(key) >= 8: print('Trigger name too long') lv.msgbox(lv.scr_act(), "Error", "Tigger name too long", [], True) print(text_area.get_text()) #beginhour bhour = roller1.get_selected() bminute = roller2.get_selected() bsecs = roller3.get_selected() begin_time = "{:02}{:02}{:02}".format(bhour, bminute, bsecs) print(begin_time) #duration hdur = int(roller4.get_selected()) * 60 * 60 mdur = int(roller5.get_selected()) * 60 sdur = int(roller6.get_selected()) duration = str(hdur + mdur + sdur) print(str(duration)) #enable flow sensor? flow_enable_state = flow_sensor_switch.has_state(lv.STATE.CHECKED) print(flow_enable_state) #check flow sensor for 5 sec flow_debounce_state = flow_debounce_checkbox.has_state( lv.STATE.CHECKED) print(flow_debounce_state) #check min reading flow_max_state = flow_debounce_checkbox.has_state(lv.STATE.CHECKED) print(flow_max_state) #max flow limit flow_max_val = flow_max_spinbox.get_value() flow_max_val = flow_max_spinbox.get_value() print(flow_max_val) #enable rain sensor rain_sensor_enable_state = rain_sensor_switch.has_state( lv.STATE.CHECKED) print(rain_sensor_enable_state) rain_debounce_state = rain_sensor_debounce.has_state( lv.STATE.CHECKED) print(rain_debounce_state) #Generate keys to store in DB '''create unique id''' def new_id(): return random.randint(0, 9999) temp_db_keys = [] for key in db: temp_db_keys.append(eval(key)) temp_key = new_id() if temp_key in temp_db_keys: temp_key = new_id() return temp_key create_trigger(unique_id=temp_key, name=key, begin=begin_time, duration=duration, flow_enable_state=flow_enable_state, flow_debounce_state=flow_debounce_state, flow_max_state=flow_max_state, flow_max_val=flow_max_val, rain_enable_state=rain_sensor_enable_state, rain_debounce_state=rain_debounce_state) def ta_event_cb(e, keyboard): code = e.get_code() text_area = e.get_target() if code == lv.EVENT.FOCUSED: keyboard.set_textarea(text_area) keyboard.clear_flag(lv.obj.FLAG.HIDDEN) keyboard.move_foreground() cont.add_flag(lv.obj.FLAG.HIDDEN) if code == lv.EVENT.DEFOCUSED: keyboard.set_textarea(None) keyboard.add_flag(lv.obj.FLAG.HIDDEN) cont.clear_flag(lv.obj.FLAG.HIDDEN) '''main scr''' scr = lv.obj() scr.clean() lv.scr_load(scr) btn_cancel = lv.btn(scr) btn_cancel.add_event_cb(lambda e: btn_event(e, "Cancel"), lv.EVENT.CLICKED, None) btn_cancel_text = lv.label(btn_cancel) btn_cancel_text.set_text('Cancel') btn_save = lv.btn(scr) btn_save.align_to(btn_cancel, lv.ALIGN.OUT_RIGHT_TOP, 185, 0) btn_save.add_event_cb(lambda e: btn_event(e, "Save"), lv.EVENT.CLICKED, None) btn_save_text = lv.label(btn_save) btn_save_text.set_text('Save') label = lv.label(scr) label.set_text('Add New Trigger') label.align_to(btn_cancel, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) label2 = lv.label(scr) label2.set_text('Trigger Name (Max: 8 char)') label2.align_to(label, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) text_area = lv.textarea(scr) text_area.set_height(40) text_area.align_to(label2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) text_area.add_event_cb(lambda e: ta_event_cb(e, keyboard), lv.EVENT.ALL, None) keyboard = lv.keyboard(scr) keyboard.align_to(scr, lv.ALIGN.BOTTOM_MID, 0, 0) keyboard.set_textarea(text_area) keyboard.add_flag(lv.obj.FLAG.HIDDEN) label3 = lv.label(lv.scr_act()) label3.set_text("Set Time to begin Trigger") label3.align_to(text_area, lv.ALIGN.OUT_BOTTOM_LEFT, 5, 10) '''cont width''' cont_width = 280 '''cont : Roller Time ''' cont = lv.obj(lv.scr_act()) cont.align_to(label3, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) cont.set_height(150) cont.set_width(cont_width) '''roller options''' dump = [] for i in range(0, 24): dump.append(str(i)) opts1 = "\n".join(dump) del dump dump = [] for i in range(0, 60): dump.append(str(i)) opts2 = "\n".join(dump) '''roller trigger time''' roller1 = lv.roller(cont) roller1.align_to(cont, lv.ALIGN.LEFT_MID, 0, 20) roller1.set_width(50) roller1.set_options(opts1, lv.roller.MODE.NORMAL) roller1.set_visible_row_count(3) roller1.set_selected(8, lv.ANIM.ON) roller2 = lv.roller(cont) roller2.align_to(roller1, lv.ALIGN.OUT_RIGHT_TOP, 5, 0) roller2.set_width(50) roller2.set_options(opts2, lv.roller.MODE.NORMAL) roller2.set_visible_row_count(3) roller2.set_selected(30, lv.ANIM.ON) roller3 = lv.roller(cont) roller3.align_to(roller2, lv.ALIGN.OUT_RIGHT_TOP, 5, 0) roller3.set_width(50) roller3.set_options(opts2, lv.roller.MODE.NORMAL) roller3.set_visible_row_count(3) roller3.set_selected(0, lv.ANIM.ON) label4 = lv.label(cont) label4.align_to(roller1, lv.ALIGN.OUT_TOP_MID, 0, 0) label4.set_text('hour') label5 = lv.label(cont) label5.align_to(roller2, lv.ALIGN.OUT_TOP_MID, 0, 0) label5.set_text('min') label6 = lv.label(cont) label6.align_to(roller3, lv.ALIGN.OUT_TOP_MID, 0, 0) label6.set_text('sec') '''reset button trigger''' btn_reset = lv.btn(cont) btn_reset.align_to(roller3, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) btn_reset.add_event_cb(lambda e: btn_event(e, "Reset 1"), lv.EVENT.CLICKED, None) btn_reset_lbl = lv.label(btn_reset) btn_reset_lbl.set_text("RESET") btn_am = lv.btn(cont) btn_am.align_to(btn_reset, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) btn_am.add_event_cb(lambda e: btn_event(e, "Set AM 1"), lv.EVENT.CLICKED, None) btn_am_lbl = lv.label(btn_am) btn_am_lbl.set_text('am') btn_pm = lv.btn(cont) btn_pm.align_to(btn_am, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) btn_pm.add_event_cb(lambda e: btn_event(e, "Set PM 1"), lv.EVENT.CLICKED, None) btn_pm_lbl = lv.label(btn_pm) btn_pm_lbl.set_text('pm') label7 = lv.label(scr) label7.align_to(cont, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) label7.set_text('Set Duration') '''cont 2 : Roller Duration''' cont2 = lv.obj(scr) cont2.align_to(label7, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) cont2.set_height(150) cont2.set_width(cont_width) '''roller duration''' roller4 = lv.roller(cont2) roller4.align_to(cont2, lv.ALIGN.LEFT_MID, 0, 20) roller4.set_width(50) roller4.set_options(opts1, lv.roller.MODE.NORMAL) roller4.set_visible_row_count(3) roller4.set_selected(0, lv.ANIM.ON) roller5 = lv.roller(cont2) roller5.align_to(roller4, lv.ALIGN.OUT_RIGHT_TOP, 5, 0) roller5.set_width(50) roller5.set_options(opts2, lv.roller.MODE.NORMAL) roller5.set_visible_row_count(3) roller5.set_selected(0, lv.ANIM.ON) roller6 = lv.roller(cont2) roller6.align_to(roller5, lv.ALIGN.OUT_RIGHT_TOP, 5, 0) roller6.set_width(50) roller6.set_options(opts2, lv.roller.MODE.NORMAL) roller6.set_visible_row_count(3) roller6.set_selected(30, lv.ANIM.ON) label8 = lv.label(cont2) label8.align_to(roller4, lv.ALIGN.OUT_TOP_MID, 0, 0) label8.set_text('hour') label9 = lv.label(cont2) label9.align_to(roller5, lv.ALIGN.OUT_TOP_MID, 0, 0) label9.set_text('min') label10 = lv.label(cont2) label10.align_to(roller6, lv.ALIGN.OUT_TOP_MID, 0, 0) label10.set_text('sec') '''reset button duration''' btn_reset2 = lv.btn(cont2) btn_reset2.align_to(roller6, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) btn_reset2.add_event_cb(lambda e: btn_event(e, "Reset 2"), lv.EVENT.CLICKED, None) btn_reset_lbl2 = lv.label(btn_reset2) btn_reset_lbl2.set_text("RESET") btn_am2 = lv.btn(cont2) btn_am2.align_to(btn_reset2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) btn_am2.add_event_cb(lambda e: btn_event(e, "Reset hour"), lv.EVENT.CLICKED, None) btn_am_lbl2 = lv.label(btn_am2) btn_am_lbl2.set_text('hour') btn_pm2 = lv.btn(cont2) btn_pm2.align_to(btn_am2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) btn_pm2.add_event_cb(lambda e: btn_event(e, "Reset minute"), lv.EVENT.CLICKED, None) btn_pm_lbl2 = lv.label(btn_pm2) btn_pm_lbl2.set_text('minute') label10 = lv.label(scr) label10.align_to(cont2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) label10.set_text('Set Automatic disable trigger settings') '''cont 3 : Flow sensor''' cont3 = lv.obj(scr) cont3.align_to(label10, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) cont3.set_height(150) cont3.set_width(cont_width) flow_sensor_lbl = lv.label(cont3) flow_sensor_lbl.align_to(cont3, lv.ALIGN.TOP_LEFT, 0, 5) flow_sensor_lbl.set_text("Enable Flow Sensor") flow_sensor_switch = lv.switch(cont3) flow_sensor_switch.align_to(cont3, lv.ALIGN.TOP_RIGHT, 0, -5) #label12 = lv.label(cont3) #label12.align_to(label11, lv.ALIGN.OUT_BOTTOM_LEFT,0,0) #label12.set_text('5 sec threshold') flow_debounce_checkbox = lv.checkbox(cont3) flow_debounce_checkbox.align_to(flow_sensor_lbl, lv.ALIGN.OUT_BOTTOM_LEFT, 5, 10) flow_debounce_checkbox.set_text("Debounce protection") flow_max_checkbox = lv.checkbox(cont3) flow_max_checkbox.align_to(flow_debounce_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 5) flow_max_checkbox.set_text('Max flow protection') flow_max_spinbox = lv.spinbox(cont3) flow_max_spinbox.align_to(flow_max_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) flow_max_spinbox.set_range(0, 9999) h = flow_max_spinbox.get_height() flow_max_spinbox_btn1 = lv.btn(cont3) flow_max_spinbox_btn1.align_to(flow_max_spinbox, lv.ALIGN.OUT_RIGHT_TOP, 0, 0) flow_max_spinbox_btn1.set_style_bg_img_src(lv.SYMBOL.PLUS, 0) flow_max_spinbox_btn1.set_size(h, h) flow_max_spinbox_btn2 = lv.btn(cont3) flow_max_spinbox_btn2.align_to(flow_max_spinbox_btn1, lv.ALIGN.OUT_RIGHT_TOP, 0, 0) flow_max_spinbox_btn2.set_style_bg_img_src(lv.SYMBOL.MINUS, 0) flow_max_spinbox_btn2.set_size(h, h) '''Cont 4: Rain sensor''' cont4 = lv.obj(scr) cont4.align_to(cont3, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cont4.set_height(90) cont4.set_width(cont_width) rain_sensor_lbl = lv.label(cont4) rain_sensor_lbl.align_to(cont4, lv.ALIGN.TOP_LEFT, 0, 5) rain_sensor_lbl.set_text("Enable Rain Sensor") rain_sensor_switch = lv.switch(cont4) rain_sensor_switch.align_to(cont4, lv.ALIGN.TOP_RIGHT, 0, -5) rain_sensor_debounce = lv.checkbox(cont4) rain_sensor_debounce.align_to(rain_sensor_lbl, lv.ALIGN.OUT_BOTTOM_LEFT, 5, 10) rain_sensor_debounce.set_text("Debounce protection") '''Calender''' cont5 = lv.obj(scr) cont5.align_to(cont4, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cont5.set_height(290) cont5.set_width(cont_width) label14 = lv.label(cont5) label14.align_to(cont5, lv.ALIGN.TOP_LEFT, 0, 5) label14.set_text("Enable days") calendar_switch = lv.switch(cont5) calendar_switch.align_to(cont5, lv.ALIGN.TOP_RIGHT, 0, -5) cal_1_checkbox = lv.checkbox(cont5) cal_1_checkbox.align_to(label14, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_1_checkbox.set_text("Monday") cal_2_checkbox = lv.checkbox(cont5) cal_2_checkbox.align_to(cal_1_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_2_checkbox.set_text("Tuesday") cal_3_checkbox = lv.checkbox(cont5) cal_3_checkbox.align_to(cal_2_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_3_checkbox.set_text("Wednesday") cal_4_checkbox = lv.checkbox(cont5) cal_4_checkbox.align_to(cal_3_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_4_checkbox.set_text("Thursday") cal_5_checkbox = lv.checkbox(cont5) cal_5_checkbox.align_to(cal_4_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_5_checkbox.set_text("Friday") cal_6_checkbox = lv.checkbox(cont5) cal_6_checkbox.align_to(cal_5_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_6_checkbox.set_text("Saturday") cal_7_checkbox = lv.checkbox(cont5) cal_7_checkbox.align_to(cal_6_checkbox, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) cal_7_checkbox.set_text("Sunday")
def event_handler(e): code = e.get_code() obj = e.get_target() if code == lv.EVENT.VALUE_CHANGED: if obj.has_state(lv.STATE.CHECKED): print("State: on") else: print("State: off") lv.scr_act().set_flex_flow(lv.FLEX_FLOW.COLUMN) lv.scr_act().set_flex_align(lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER) sw = lv.switch(lv.scr_act()) sw.add_event_cb(event_handler,lv.EVENT.ALL, None) sw = lv.switch(lv.scr_act()) sw.add_state(lv.STATE.CHECKED) sw.add_event_cb(event_handler, lv.EVENT.ALL, None) sw = lv.switch(lv.scr_act()) sw.add_state(lv.STATE.DISABLED) sw.add_event_cb(event_handler, lv.EVENT.ALL, None) sw = lv.switch(lv.scr_act()) sw.add_state(lv.STATE.CHECKED | lv.STATE.DISABLED) sw.add_event_cb(event_handler, lv.EVENT.ALL, None)
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver import time def event_handler(obj, evt): if evt == lv.EVENT.VALUE_CHANGED: state = obj.get_state() if state: print("State: On") else: print("State: Off") #Create a switch and apply the styles sw1 = lv.switch(lv.scr_act(), None) sw1.align(None, lv.ALIGN.CENTER, 0, -50) sw1.set_event_cb(event_handler) # Copy the first switch and turn it ON sw2 = lv.switch(lv.scr_act(), sw1) sw2.on(lv.ANIM.ON) sw2.set_event_cb(event_handler) sw2.align(None, lv.ALIGN.CENTER, 0, 50)
def main_page(self, tile_num): alarm_clock_main_tile = self.mainbar.get_tile_obj(tile_num) alarm_clock_main_style = lv.style_t() alarm_clock_main_style.copy(self.mainbar.get_style()) self.activated_cont = lv.obj(alarm_clock_main_tile, None) self.activated_cont.set_width(lv.scr_act().get_disp().driver.hor_res) self.activated_cont.set_height(30) self.activated_cont.add_style(lv.label.PART.MAIN, alarm_clock_main_style) self.activated_label = lv.label(self.activated_cont, None) self.activated_label.align(self.activated_cont, lv.ALIGN.IN_LEFT_MID, 10, 0) # align left self.activated_label.set_text("Activated") self.activated_label.add_style(lv.label.PART.MAIN, alarm_clock_main_style) # create the activate switch self.activated_switch = lv.switch(self.activated_cont, None) self.activated_switch.align(self.activated_cont, lv.ALIGN.IN_RIGHT_MID, -10, 0) self.day_cont_style = lv.style_t() self.day_cont_style.copy(self.mainbar.get_style()) self.day_cont_style.set_pad_inner(lv.STATE.DEFAULT, 1) self.day_cont_style.set_pad_left(lv.STATE.DEFAULT, 10) self.day_cont_style.set_pad_top(lv.STATE.DEFAULT, 4) self.day_cont = lv.cont(alarm_clock_main_tile, None) self.day_cont.set_width(lv.scr_act().get_disp().driver.hor_res) self.day_cont.set_layout(lv.LAYOUT.PRETTY_BOTTOM) self.day_cont.set_fit(lv.FIT.NONE) self.day_cont.align(self.activated_cont, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) self.day_cont.add_style(lv.cont.PART.MAIN, self.day_cont_style) # create the day buttons day_style = lv.style_t() day_style.set_radius(lv.STATE.DEFAULT, 3) for i in range(7): # create the button self.day_button[i] = lv.btn(self.day_cont, None) self.day_button[i].set_checkable(True) self.day_button[i].add_style(lv.btn.PART.MAIN, day_style) self.day_button[i].set_size(30, 30) self.day_label[i] = lv.label(self.day_button[i]) # print("Setting label %d text to: %s"%(i,self.weekDayTable_2[i])) self.day_label[i].set_text(self.alarm_clock_week_day_2[i]) # create a roller for the hours for i in range(23): self.hours += (str(i) + "\n") self.hours += str(23) #print(self.hours) self.hourRoller = lv.roller(alarm_clock_main_tile, None) self.hourRoller.set_auto_fit(False) self.hourRoller.set_width(60) self.hourRoller.set_visible_row_count(4) self.hourRoller.set_options(self.hours, lv.roller.MODE.INFINITE) self.hourRoller.align(self.day_cont, lv.ALIGN.OUT_BOTTOM_LEFT, 50, 0) for i in range(59): # self.minutes += (str(i)+"\n") self.minutes += "%02d\n" % i self.minutes += str(59) self.minuteRoller = lv.roller(alarm_clock_main_tile, None) self.minuteRoller.set_auto_fit(False) self.minuteRoller.set_width(60) self.minuteRoller.set_visible_row_count(4) self.minuteRoller.set_options(self.minutes, lv.roller.MODE.INFINITE) self.minuteRoller.align(self.day_cont, lv.ALIGN.OUT_BOTTOM_RIGHT, -50, 0) self.colon = lv.label(alarm_clock_main_tile, None) self.colon.set_text(":") self.colon.add_style(lv.label.PART.MAIN, self.day_cont_style) self.colon.align(self.hourRoller, lv.ALIGN.OUT_RIGHT_MID, 0, 0) exit_btn = lv.imgbtn(self.alarm_clock_main_tile, None) exit_btn.set_src(lv.btn.STATE.RELEASED, self.mainbar.get_exit_btn_dsc()) exit_btn.add_style(lv.imgbtn.PART.MAIN, alarm_clock_main_style) exit_btn.align(self.alarm_clock_main_tile, lv.ALIGN.IN_BOTTOM_LEFT, 10, -10) self.log.debug("setting up exit callback") exit_btn.set_event_cb(self.exit_alarm_clock_main_event_cb) setup_btn = lv.imgbtn(self.alarm_clock_main_tile, None) setup_btn.set_src(lv.btn.STATE.RELEASED, self.mainbar.get_setup_btn_dsc()) setup_btn.add_style(lv.imgbtn.PART.MAIN, alarm_clock_main_style) setup_btn.align(self.alarm_clock_main_tile, lv.ALIGN.IN_BOTTOM_RIGHT, -10, -10) self.log.debug("setting up setup callback")
def m4(): position = 0 scr = lv.obj() lv.scr_load(scr) #container for drop and switch cont = lv.cont(scr) cont.set_auto_realign(True) cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) cont.set_layout(lv.LAYOUT.PRETTY_MID) cont.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0) cont.set_style_local_radius(0, 0, 0) #dropdown - event def drop_event(obj, event): if event == lv.EVENT.VALUE_CHANGED: position = drop.get_selected() print("changing trigger position to {}".format(str(position))) m4_1(position) #call to refresh roller position #dropdown drop = lv.dropdown(cont) drop.set_style_local_border_post(lv.BORDER_SIDE.NONE, lv.BORDER_SIDE.NONE, lv.BORDER_SIDE.NONE) drop.set_options( "Trigger 1\nTrigger 2\nTrigger 3\nTrigger 4\nTrigger 5\nTrigger 6\nTrigger 7\nTrigger 8\nTrigger 9\n Trigger 10" ) drop.set_event_cb(drop_event) #tabview tab = lv.tabview(scr) tab.align(cont, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) tab1 = tab.add_tab("Time") tab2 = tab.add_tab("Auto") tab3 = tab.add_tab("Switches") tab4 = tab.add_tab("Desc") ####Tab 1 #label lbl1 = lv.label(cont) lbl1.set_text("Arm?") #switch switch = lv.switch(cont) lbl2 = lv.label(tab1) lbl2.set_text("Set time to begin trigger :") lbl2.align(tab1, lv.ALIGN.IN_TOP_MID, 0, 10) #contain - sort vert cont2 = lv.cont(tab1) cont2.align(lbl2, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) cont2.set_auto_realign(True) cont2.set_layout(lv.LAYOUT.ROW_MID) cont2.set_fit(lv.FIT.TIGHT) roller_hour = lv.roller(cont2) roller_hour.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23", lv.roller.MODE.NORMAL) roller_minute = lv.roller(cont2) roller_minute.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", lv.roller.MODE.NORMAL) roller_sec = lv.roller(cont2) roller_sec.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", lv.roller.MODE.NORMAL) btn = lv.btn(cont2) lbl_btn = lv.label(btn) lbl_btn.set_text("SET") #duration lbl3 = lv.label(tab1) lbl3.set_text("Set duration for trigger : ") lbl3.align(cont2, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) cont3 = lv.cont(tab1) cont3.align(lbl3, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) cont3.set_auto_realign(True) cont3.set_layout(lv.LAYOUT.ROW_MID) cont3.set_fit(lv.FIT.TIGHT) roller_hour_dur = lv.roller(cont3) roller_hour_dur.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23", lv.roller.MODE.NORMAL) roller_minute_dur = lv.roller(cont3) roller_minute_dur.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", lv.roller.MODE.NORMAL) roller_sec_dur = lv.roller(cont3) roller_sec_dur.set_options( "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", lv.roller.MODE.NORMAL) #button (set timer) - event def btn_event(obj, event): if obj == btn and event == lv.EVENT.CLICKED: position = drop.get_selected() trigger[position].bhour = roller_hour.get_selected() trigger[position].bminute = roller_minute.get_selected() trigger[position].bsecond = roller_sec.get_selected() print("btn - event : position {}, bhour {}, bminute {}, bsec{}". format(str(position), str(roller_hour.get_selected()), str(roller_minute.get_selected()), str(roller_sec.get_selected()))) if obj == btn2 and event == lv.EVENT.CLICKED: position = drop.get_selected() trigger[position].hourdur = roller_hour_dur.get_selected() trigger[position].minutedur = roller_minute_dur.get_selected() trigger[position].seconddur = roller_sec_dur.get_selected() print("btn2 - event") if obj == switch and event == lv.EVENT.VALUE_CHANGED: position = drop.get_selected() trigger[position].isArmed = switch.get_state() print("Arming trigger {}".format(switch.get_state())) if obj == btn_t4_1 and event == lv.EVENT.CLICKED: m5() btn2 = lv.btn(cont3) lbl_btn2 = lv.label(btn2) lbl_btn2.set_text("SET") #button event call btn.set_event_cb(btn_event) btn2.set_event_cb(btn_event) switch.set_event_cb(btn_event) def m4_1(_position): #run after dropdown selected or pos 0 default position = _position print("M4_1() calling position {}".format(position)) roller_hour.set_selected(trigger[position].bhour, lv.ANIM.ON) roller_minute.set_selected(trigger[position].bminute, lv.ANIM.ON) roller_sec.set_selected(trigger[position].bsecond, lv.ANIM.ON) roller_hour_dur.set_selected(trigger[position].hourdur, lv.ANIM.ON) roller_minute_dur.set_selected(trigger[position].minutedur, lv.ANIM.ON) roller_sec_dur.set_selected(trigger[position].seconddur, lv.ANIM.ON) #set proper state of switch if switch.get_state() != trigger[position].isArmed: switch.toggle(lv.ANIM.ON) m4_1(position) #####Tab 2 - Automation tab2.set_height(320) lbl_t2 = lv.label(tab2) lbl_t2.align(tab1, lv.ALIGN.IN_TOP_MID, 210, 10) lbl_t2.set_text("Automatic trigger disable settings") cont3 = lv.cont(tab2) cont3.set_auto_realign(True) cont3.set_layout(lv.LAYOUT.PRETTY_MID) cont3.align(lbl_t2, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) cont3.set_fit2(lv.FIT.TIGHT, lv.FIT.TIGHT) lbl_t2_2 = lv.label(cont3) lbl_t2_2.set_text("Enable Flow Sensor") switch_t2_1 = lv.switch(cont3) lbl_t2_3 = lv.label(cont3) lbl_t2_3.set_text("Enable Rain Sensor") switch_t2_2 = lv.switch(cont3) lbl_t2_4 = lv.label(cont3) lbl_t2_4.set_text("Enable MET weather API") switch_t2_3 = lv.switch(cont3) lbl_t2_5 = lv.label(cont3) lbl_t2_5.set_text("Enable Soil Sensor") switch_t2_4 = lv.switch(cont3) gauge_t2 = lv.gauge(tab2) gauge_t2.align(cont3, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) ####Tab 3 - Switches tab3.set_height(320) lbl_t3 = lv.label(tab3) lbl_t3.align(tab3, lv.ALIGN.IN_TOP_MID, -80, 10) lbl_t3.set_text("Assign Pin to be triggered") #page4 = lv.page(tab3) #page4.set_auto_realign(True) #page4.align(lbl_t3, lv.ALIGN.OUT_BOTTOM_MID,0,10) #page4.set_size(290,800) btnmtx_t3 = lv.btnmatrix(tab3) btnmtx_t3.align(lbl_t3, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) btnmtx_t3.set_width(250) btnmtx_t3.set_height(600) btn_map_t3 = [ "3.3v", "GND", "\n", "EN", "23", "\n", "36", "22", "\n", "39", "01", "\n", "34", "03", "\n", "35", "21", "\n", "32", "GND", "\n", "33", "19", "\n", "25", "18", "\n", "26", "05", "\n", "27", "17", "\n", "14", "16", "\n", "12", "04", "\n", "GND", "00", "\n", "13", "02", "\n", "09", "15", "\n", "10", "08", "\n", "11", "07", "\n", "VIN", "06", "" ] btnmtx_t3.set_map(btn_map_t3) btnmtx_t3.set_btn_ctrl_all(btnmtx_t3.CTRL.CHECKABLE) btn_t3_save = lv.btn(tab3) btn_t3_save.align(btnmtx_t3, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) lbl_btn_t3_save = lv.label(btn_t3_save) lbl_btn_t3_save.set_text("Save Toggles") #### Tab 4 Description btn_t4_1 = lv.btn(tab4) btn_t4_1.align(tab4, lv.ALIGN.CENTER, 0, 0) btn_t4_1.set_event_cb(btn_event) lbl_btn_t4_1 = lv.label(btn_t4_1) lbl_btn_t4_1.set_text(lv.SYMBOL.HOME)
def m6(): #Wifi Settings #list event callback #button call back def list_event(obj, event): list_btn = lv.list.__cast__(obj) if event == lv.EVENT.CLICKED: print(list_btn.get_btn_text()) m6_1(list_btn.get_btn_text()) def btn_event(obj, event): if obj == home and event == lv.EVENT.CLICKED: m5() if obj == switch and event == lv.EVENT.VALUE_CHANGED: print('Value change : ' + str(obj.get_state())) if obj.get_state() == True: print('Enabling Wifi') sta_if.active(True) data = sta_if.scan() list = lv.list(scr) list.align(cont1, lv.ALIGN.OUT_BOTTOM_MID,0,0) for d in data: list.add_btn(lv.SYMBOL.RIGHT, str(d[0].decode('UTF-8'))).set_event_cb(list_event) if obj.get_state() == False: print('Disabling Wifi') sta_if.active(False) scr = lv.obj() lv.scr_load(scr) #top tab dengan home button cont = lv.cont(scr) cont.set_auto_realign(True) cont.set_style_local_radius(0,0,0) cont.align(scr, lv.ALIGN.IN_TOP_MID,0,0) cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) #home button home = lv.btn(cont) home.align(cont, lv.ALIGN.IN_LEFT_MID, 0,10) home.set_fit2(lv.FIT.TIGHT, lv.FIT.TIGHT) home.set_event_cb(btn_event) lbl_home = lv.label(home) lbl_home.set_text(lv.SYMBOL.HOME) #label top tab lbl_top = lv.label(cont) lbl_top.set_text("Wifi Config") lbl_top.align(home, lv.ALIGN.OUT_RIGHT_MID,10,0) #set wifi cont1 = lv.cont(scr) cont1.set_auto_realign(True) cont1.align(cont, lv.ALIGN.OUT_BOTTOM_MID,0,20) cont1.set_fit2(lv.FIT.TIGHT, lv.FIT.TIGHT) lbl_en_wifi = lv.label(cont1) lbl_en_wifi.set_text("Enable Wifi") lbl_en_wifi.align(cont1, lv.ALIGN.IN_LEFT_MID, 10, 10) switch = lv.switch(cont1) switch.align(lbl_en_wifi, lv.ALIGN.OUT_RIGHT_MID, 100, 0) switch.set_event_cb(btn_event)