def __init__(self, page, screen): self.page = page self.screen = screen self.server = None self.wlan = network.WLAN(network.STA_IF) # use relative path on unix, absolute root else if hasattr(network, "UNIX"): self.config_file = "wifi.json" else: self.config_file = "/wifi.json" # read network config if possible self.config = self.read_wifi_config() # create dropdown, but disable it for now self.ssids = lv.dropdown(page) self.ssids.set_size(160, 32) self.ssids.align(page, lv.ALIGN.IN_TOP_MID, -20, 10) self.ssids.set_event_cb(self.on_ssid) # pre-populate list from stored wifi data if present if len(self.config["keys"]) > 0: ssids = list(self.config["keys"].keys()) self.networks = [{ "ssid": x, "open": not self.config["keys"][x] } for x in ssids] self.set_ssid_list(ssids) else: self.ssids.set_options("") self.ssids.set_text("No Networks") self.ssids.set_show_selected(False) self.ssids.set_click(False) # scan button self.scan_btn = lv.btn(page) self.scan_btn.set_size(32, 32) self.scan_btn.align(page, lv.ALIGN.IN_TOP_MID, 85, 10) self.scan_btn.set_event_cb(self.on_scan_btn) label = lv.label(self.scan_btn) label.set_text(lv.SYMBOL.REFRESH) # info/status label self.label = lv.label(page) self.label.set_long_mode(lv.label.LONG.BREAK) self.label.set_width(210) self.label.set_text("") self.label.set_align(lv.label.ALIGN.CENTER) self.label.align(page, lv.ALIGN.IN_TOP_MID, 0, 60) # enable wlan self.wlan.active(True) self.wlan.config(dhcp_hostname=self.config["name"]) # check if there is info about a last successfully # used network if "last" in self.config: print("Trying last network", self.config["last"], "...") self.connect(self.config["last"])
def __init__(self, app, page): self.app = app self.page = page # slider self.slider = lv.slider(page) self.slider.set_width(160) self.slider.align(page, lv.ALIGN.IN_TOP_LEFT, 20, 20) self.slider_label = lv.label(page) self.slider_label.align(self.slider, lv.ALIGN.OUT_RIGHT_MID, 15, 0) self.slider.set_event_cb(self.on_slider_changed) self.on_slider_changed(None) # style selector self.styles = [('Gray', ColorStyle(0xCCC)), ('Red', ColorStyle(0xF00)), ('Green', ColorStyle(0x0F0)), ('Blue', ColorStyle(0x00F))] self.style_selector = lv.dropdown(page) self.style_selector.add_style(self.style_selector.PART.MAIN, ShadowStyle()) self.style_selector.align(self.slider, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 40) self.style_selector.set_options('\n'.join(x[0] for x in self.styles)) self.style_selector.set_event_cb(self.on_style_selector_changed) # counter button self.counter_btn = lv.btn(page) self.counter_btn.set_size(80, 80) self.counter_btn.align(self.page, lv.ALIGN.IN_BOTTOM_MID, 0, -20) self.counter_label = lv.label(self.counter_btn) self.counter_label.set_text("Count") self.counter_btn.set_event_cb(self.on_counter_btn) self.counter = 0
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 __init__(self, app, page): self.app = app self.page = page self.test_events = [] self.page.set_flex_flow(lv.FLEX_FLOW.COLUMN) self.page.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER) # slider self.slider = lv.slider(page) self.slider.set_width(lv.pct(80)) self.slider_label = lv.label(page) self.slider.add_event_cb(self.on_slider_changed, lv.EVENT.VALUE_CHANGED, None) self.on_slider_changed(None) # style selector self.styles = [('Gray', ColorStyle(0xCCC)), ('Red', ColorStyle(0xF00)), ('Green', ColorStyle(0x0F0)), ('Blue', ColorStyle(0x00F))] self.style_selector = lv.dropdown(page) self.style_selector.add_style(ShadowStyle(), lv.PART.MAIN) self.style_selector.align(lv.ALIGN.OUT_BOTTOM_LEFT, 0, 40) self.style_selector.set_options('\n'.join(x[0] for x in self.styles)) self.style_selector.add_event_cb(self.on_style_selector_changed, lv.EVENT.VALUE_CHANGED, None) # counter button self.counter_btn = lv.btn(page) self.counter_btn.set_size(80, 80) self.counter_label = lv.label(self.counter_btn) self.counter_label.set_text("Count") self.counter_label.align(lv.ALIGN.CENTER, 0, 0) self.counter_btn.add_event_cb(self.on_counter_btn, lv.EVENT.CLICKED, None) self.counter = 0
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver import time # Create a drop down list ddlist = lv.dropdown(lv.scr_act()) ddlist.set_options("\n".join( ["Apple", "Banana", "Orange", "Melon", "Grape", "Raspberry"])) ddlist.set_dir(lv.dropdown.DIR.LEFT) ddlist.set_symbol(None) ddlist.set_show_selected(False) ddlist.set_text("Fruits") # It will be called automatically when the size changes ddlist.align(None, lv.ALIGN.IN_TOP_RIGHT, 0, 20) # Copy the drop LEFT list ddlist = lv.dropdown(lv.scr_act(), ddlist) ddlist.align(None, lv.ALIGN.IN_TOP_RIGHT, 0, 100)
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 m3(): global trigger print("This is callback for M3") scr = lv.obj() lv.scr_load(scr) #make container con = lv.cont(scr) con.set_auto_realign(True) #con.set_layout(lv.LAYOUT.PRETTY_TOP) con.align(scr, lv.ALIGN.IN_TOP_MID, 0, 0) con.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) con.set_style_local_radius(0, 0, 0) #label = lv.label(con) #label.set_text("Trigger No:") #label.align(con, lv.ALIGN.IN_TOP_LEFT,10,10) drop = lv.dropdown(con) drop.align(con, lv.ALIGN.IN_LEFT_MID, 10, 0) drop.set_drag(False) drop.set_options( "trigger 1\ntrigger 2\ntrigger 3\ntrigger 4\ntrigger 5\ntrigger 6\ntrigger 7\n" ) drop.set_event_cb(lambda obj, event: m3_1() if event == lv.EVENT.VALUE_CHANGED else None) btn = lv.btn(con) label_btn = lv.label(btn) btn.set_height(drop.get_height()) label_btn.set_text("New") btn.align(con, lv.ALIGN.IN_RIGHT_MID, -10, 0) def m3_1(): #load values to begin and duration con2 = lv.cont(scr) con2.align(con, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) con2.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) con2.set_style_local_radius(0, 0, 0) position = drop.get_selected() con3 = lv.cont(con2) con3.align(con2, lv.ALIGN.IN_TOP_MID, 0, 0) con3.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) tittle = lv.label(con3) tittle.align(con3, lv.ALIGN.CENTER, 0, 0) tittle.set_text("Set Begin Time") minute_btn = lv.btn(con2) minute_btn.align(con3, lv.ALIGN.OUT_BOTTOM_MID, 0, 0) minute_btn.set_style_local_radius(0, 0, 0) minute_btn.set_fit(lv.FIT.TIGHT) lbl_minute_btn = lv.label(minute_btn) lbl_minute_btn.set_text(str(trigger[position].bminute)) hour_btn = lv.btn(con2) hour_btn.align(minute_btn, lv.ALIGN.OUT_LEFT_MID, 0, 0) hour_btn.set_style_local_radius(0, 0, 0) hour_btn.set_fit(lv.FIT.TIGHT) lbl_hour_btn = lv.label(hour_btn) lbl_hour_btn.set_text(str(trigger[position].bhour)) second_btn = lv.btn(con2) second_btn.align(minute_btn, lv.ALIGN.OUT_RIGHT_MID, 0, 0) second_btn.set_style_local_radius(0, 0, 0) second_btn.set_fit(lv.FIT.TIGHT) lvl_second_btn = lv.label(second_btn) lvl_second_btn.set_text(str(trigger[position].bsecond)) m3_1()
import lvgl as lv import display_driver # # Create a drop down, up, left and right menus # opts = "\n".join( ["Apple\n" "Banana\n" "Orange\n" "Melon\n" "Grape\n" "Raspberry"]) dd = lv.dropdown(lv.scr_act()) dd.set_options_static(opts) dd.align(lv.ALIGN.TOP_MID, 0, 10) dd = lv.dropdown(lv.scr_act()) dd.set_options_static(opts) dd.set_dir(lv.DIR.BOTTOM) dd.set_symbol(lv.SYMBOL.UP) dd.align(lv.ALIGN.BOTTOM_MID, 0, -10) dd = lv.dropdown(lv.scr_act()) dd.set_options_static(opts) dd.set_dir(lv.DIR.RIGHT) dd.set_symbol(lv.SYMBOL.RIGHT) dd.align(lv.ALIGN.LEFT_MID, 10, 0) dd = lv.dropdown(lv.scr_act())
def selectors_create(parent): page = lv.page.__cast__(parent) lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_MID) grid_h = page.get_height_grid(1, 1) if disp_size <= lv.DISP_SIZE.SMALL: grid_w = page.get_width_grid(1, 1) else: grid_w = page.get_width_grid(2, 1) cal = lv.calendar(parent, None) cal.set_drag_parent(True) if disp_size > lv.DISP_SIZE.MEDIUM: cal.set_size(min(grid_h, grid_w), min(grid_h, grid_w)) else: cal.set_size(grid_w, grid_w) if disp_size <= lv.DISP_SIZE.SMALL: cal.set_style_local_text_font(lv.calendat.PART.BG, lv.STATE.DEFAULT, lv.theme_get_font_small()) hl = [{ "year": 2020, "month": 1, "day": 5 }, { "year": 2020, "month": 1, "day": 9 }] h = lv.cont(parent, None) h.set_drag_parent(True) if disp_size <= lv.DISP_SIZE.SMALL: h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) h.set_width(lv.page.get_width_fit(page)) h.set_layout(lv.LAYOUT.COLUMN_MID) elif disp_size <= lv.DISP_SIZE.MEDIUM: h.set_size(lv.obj.get_width(lv.obj.__cast__(cal)), lv.obj.get_height(lv.obj.__cast__(cal))) h.set_layout(lv.LAYOUT.PRETTY_TOP) else: h.set_click(False) h.set_style_local_bg_opa(lv.PART.MAIN, lv.STATE.DEFAULT, lv.OPA.TRANSP) h.set_style_local_border_opa(lv.PART.MAIN, lv.STATE.DEFAULT, lv.OPA.TRANSP) h.set_style_local_pad_left(lv.cont.PART.MAIN, lv.STATE.DEFAULT, 0) h.set_style_local_pad_right(lv.cont.PART.MAIN, lv.STATE.DEFAULT, 0) h.set_style_local_pad_top(lv.cont.PART_MAIN, LV_STATE_DEFAULT, 0) h.set_size(min(grid_h, grid_w), min(grid_h, grid_w)) h.set_layout(lv.LAYOUT.PRETTY_TOP) roller = lv.roller(h, None) roller.add_style(lv.cont.PART.MAIN, style_box) roller.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Roller") roller.set_auto_fit(False) roller.set_align(lv.label.ALIGN.CENTER) roller.set_visible_row_count(4) if disp_size <= lv.DISP_SIZE.SMALL: roller.set_width(lv.cont.get_width_grid(h, 1, 1)) else: roller.set_width(lv.cont.get_width_grid(h, 2, 1)) dd = lv.dropdown(h, None) dd.add_style(lv.cont.PART.MAIN, style_box) dd.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Dropdown") if disp_size <= lv.DISP_SIZE.SMALL: dd.set_width(lv.cont.get_width_grid(h, 1, 1)) else: dd.set_width(lv.cont.get_width_grid(h, 2, 1)) dd.set_options( "Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf\nHotel\nIndia\nJuliette\nKilo\nLima\nMike\nNovember\n" "Oscar\nPapa\nQuebec\nRomeo\nSierra\nTango\nUniform\nVictor\nWhiskey\nXray\nYankee\nZulu" ) list = lv.list(parent, None) list.set_scroll_propagation(True) list.set_size(grid_w, grid_h) txts = [ lv.SYMBOL.SAVE, "Save", lv.SYMBOL.CUT, "Cut", lv.SYMBOL.COPY, "Copy", lv.SYMBOL.OK, "This is a quite long text to scroll on the list", lv.SYMBOL.EDIT, "Edit", lv.SYMBOL.WIFI, "Wifi", lv.SYMBOL.BLUETOOTH, "Bluetooth", lv.SYMBOL.GPS, "GPS", lv.SYMBOL.USB, "USB", lv.SYMBOL.SD_CARD, "SD card", lv.SYMBOL.CLOSE, "Close" ] for i in range(0, len(txts) // 2, 2): btn = list.add_btn(txts[i], txts[i + 1]) 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)
}) def event_cb(e): dropdown = lv.dropdown.__cast__(e.get_target()) option = " " * 64 # should be large enough to store the option dropdown.get_selected_str(option, len(option)) print(option.strip() + " is selected") # # Create a menu from a drop-down list and show some drop-down list features and styling # # Create a drop down list dropdown = lv.dropdown(lv.scr_act()) dropdown.align(lv.ALIGN.TOP_LEFT, 10, 10) dropdown.set_options("".join([ "New project\n", "New file\n", "Open project\n", "Recent projects\n", "Preferences\n", "Exit" ])) # Set a fixed text to display on the button of the drop-down list dropdown.set_text("Menu") # Use a custom image as down icon and flip it when the list is opened # LV_IMG_DECLARE(img_caret_down) dropdown.set_symbol(img_caret_down_argb) dropdown.set_style_transform_angle(1800, lv.STATE.CHECKED) # In a menu we don't need to show the last clicked item
def gui_edit_trigger(num, flag): #num is to call trigger[num] #flag is to check 'new' or 'edit' #changes are stored in temp_trigger_item print('Printing Num : {}'.format(num)) temp_trigger_item = trigger if flag == 'edit': temp_trigger_item = trigger[num] print('Btn Pressed : {}'.format(str(temp_trigger_item))) elif flag == 'new': print('Creating new Trigger') #template should match with INITIAL TIMERS temp_trigger_item = { 'name': 'New Trigger', 'hb': 0, 'mb': 0, 'sb': 5, 'dur': 5, 'pin': 5, 'timerno': 0, 'cardnum': 0, 'daysoweek': [0, 1, 2, 3, 4, 5, 6], 'sec_start': 0 } def check_daysoweek(checkbox_array): temp_daysoweek = [] for num, check in enumerate(checkbox_array, 0): if check.get_state() == True: temp_daysoweek.append(num) print(temp_daysoweek) return temp_daysoweek def btn_event(task, params): if params == 'cancel': lv.scr_load(scr) elif params['param'] == 'save' and params['flag'] == 'edit': print(params) temp_trigger_item['name'] = params['name'] temp_trigger_item['hb'] = params['hb'] temp_trigger_item['mb'] = params['mb'] temp_trigger_item['sb'] = params['sb'] temp_trigger_item['dur'] = params['dur'] temp_trigger_item['pin'] = params['pin'] temp_trigger_item['timerno'] = params['timerno'] temp_trigger_item['cardnum'] = params['cardnum'] temp_trigger_item['daysoweek'] = params['daysoweek'] temp_trigger_item['sec_start'] = params['sec_start'] print('Triger Edit : Settings saved') lv.scr_load(scr) elif params['param'] == 'save' and params['flag'] == 'new': del params['param'] del params['flag'] trigger.append(params) gui_main() print('new key added : {}'.format(params)) global scr3 scr3 = lv.obj() lv.scr_load(scr3) btn1 = lv.btn(scr3) 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(scr3, lv.ALIGN.TOP_LEFT, 0, 0) btn1.add_event_cb(lambda task: btn_event(task, 'cancel'), lv.EVENT.CLICKED, None) btn2 = lv.btn(scr3) 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(scr3, lv.ALIGN.TOP_RIGHT, 0, 0) pinname = {'0': 21, '1': 19, '2': 18, '3': 5} btn2.add_event_cb( lambda task: btn_event(task, params={ 'param': 'save', 'flag': flag, 'name': ta_name.get_text(), 'hb': r1.get_selected(), 'mb': r2.get_selected(), 'sb': r3.get_selected(), 'dur': ((r4.get_selected() * 60 * 60) + (r5.get_selected() * 60) + r6.get_selected( )), 'pin': pinname[str(drpdwn.get_selected())], 'timerno': 0, 'cardnum': 0, 'daysoweek': check_daysoweek(checkbox), 'sec_start': 0 }), lv.EVENT.CLICKED, None) def refresh_label(): #label for activation time label3.set_text( 'Set trigger activation time\n{:02} : {:02} : {:02}'.format( r1.get_selected(), r2.get_selected(), r3.get_selected())) #label for duration durations = (r4.get_selected() * 60 * 60) + (r5.get_selected() * 60) + r6.get_selected() label4.set_text( 'Set Duration for trigger\n{:,} in seconds'.format(durations)) label1 = lv.label(scr3) if flag == 'edit': label1.set_text('Edit Trigger Settings') elif flag == 'new': label1.set_text('New Trigger Settings') label1.align_to(btn1, lv.ALIGN.OUT_BOTTOM_LEFT, 10, 10) label2 = lv.label(scr3) label2.set_text('Trigger Name') label2.align_to(label1, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) def keyboard_event(task, kb, scr3): event = task.get_code() ta = task.get_target() #get ta object if event == lv.EVENT.FOCUSED: #enable keyboard kb.set_textarea(ta) kb.clear_flag(lv.obj.FLAG.HIDDEN) #hide others for i in range(6, scr3.get_child_cnt()): scr3.get_child(i).add_flag(lv.obj.FLAG.HIDDEN) if event == lv.EVENT.DEFOCUSED: #disable keyboard and hide kb.set_textarea(None) kb.add_flag(lv.obj.FLAG.HIDDEN) #show others for i in range(6, scr3.get_child_cnt()): scr3.get_child(i).clear_flag(lv.obj.FLAG.HIDDEN) ta_name = lv.textarea(scr3) ta_name.align_to(label2, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) ta_name.add_text(temp_trigger_item['name']) ta_name.set_size(205, 40) ta_name.add_state(lv.STATE.FOCUSED) ta_name.add_event_cb(lambda task: keyboard_event(task, kb, scr3), lv.EVENT.ALL, None) kb = lv.keyboard(scr3) kb.align_to(ta_name, lv.ALIGN.OUT_BOTTOM_LEFT, -10, 10) kb.set_textarea(ta_name) kb.add_flag(lv.obj.FLAG.HIDDEN) label3 = lv.label(scr3) label3.set_text('Set trigger activation time') label3.align_to(ta_name, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) 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) del dump #Hour, Minute and Seconds to begin set using rollers r1 = lv.roller(scr3) r1.set_width(80) r1.set_height(80) r1.set_options(opts1, lv.roller.MODE.NORMAL) r1.align_to(label3, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 35) r2 = lv.roller(scr3) r2.set_width(80) r2.set_height(80) r2.set_options(opts2, lv.roller.MODE.NORMAL) r2.align_to(r1, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) r3 = lv.roller(scr3) r3.set_width(80) r3.set_height(80) r3.set_options(opts2, lv.roller.MODE.NORMAL) r3.align_to(r2, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) if flag == 'edit': r1.set_selected(temp_trigger_item['hb'], lv.ANIM.ON) r2.set_selected(temp_trigger_item['mb'], lv.ANIM.ON) r3.set_selected(temp_trigger_item['sb'], lv.ANIM.ON) r1_lbl = lv.label(scr3) r1_lbl.set_text('Hour') r1_lbl.align_to(r1, lv.ALIGN.OUT_TOP_MID, 0, 0) r2_lbl = lv.label(scr3) r2_lbl.set_text('Minute') r2_lbl.align_to(r2, lv.ALIGN.OUT_TOP_MID, 0, 0) r3_lbl = lv.label(scr3) r3_lbl.set_text('Seconds') r3_lbl.align_to(r3, lv.ALIGN.OUT_TOP_MID, 0, 0) #Duration. Duration information is set in refresh_label() label4 = lv.label(scr3) label4.align_to(r1, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) r4 = lv.roller(scr3) r4.set_width(80) r4.set_height(80) r4.set_options(opts1, lv.roller.MODE.NORMAL) r4.align_to(label4, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 35) r5 = lv.roller(scr3) r5.set_width(80) r5.set_height(80) r5.set_options(opts2, lv.roller.MODE.NORMAL) r5.align_to(r4, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) r6 = lv.roller(scr3) r6.set_width(80) r6.set_height(80) r6.set_options(opts2, lv.roller.MODE.NORMAL) r6.align_to(r5, lv.ALIGN.OUT_RIGHT_TOP, 10, 0) def convert(seconds): min, sec = divmod(seconds, 60) hour, min = divmod(min, 60) return [hour, min, sec] if flag == 'edit': convert(temp_trigger_item['dur']) r4.set_selected(convert(temp_trigger_item['dur'])[0], lv.ANIM.ON) r5.set_selected(convert(temp_trigger_item['dur'])[1], lv.ANIM.ON) r6.set_selected(convert(temp_trigger_item['dur'])[2], lv.ANIM.ON) r4_lbl = lv.label(scr3) r4_lbl.set_text('Hour') r4_lbl.align_to(r4, lv.ALIGN.OUT_TOP_MID, 0, 0) r5_lbl = lv.label(scr3) r5_lbl.set_text('Minute') r5_lbl.align_to(r5, lv.ALIGN.OUT_TOP_MID, 0, 0) r6_lbl = lv.label(scr3) r6_lbl.set_text('Seconds') r6_lbl.align_to(r6, lv.ALIGN.OUT_TOP_MID, 0, 0) #Relay Setup label5 = lv.label(scr3) label5.set_text('Assign Relay to Trigger') label5.align_to(r4, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) drpdwn = lv.dropdown(scr3) drpdwn.align_to(label5, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) drpdwn.set_options("\n".join(['Relay 1', 'Relay 2', 'Relay 3', 'Relay 4'])) relayname = {21: '0', 19: '1', 18: '2', 5: '3'} if flag == 'edit': drpdwn.set_selected(int(relayname[temp_trigger_item['pin']])) label6 = lv.label(scr3) label6.set_text('Set days of week to turn trigger :') label6.align_to(drpdwn, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) checkbox = [] checkbox_lbl = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ] for i in range(0, 6): checkbox.append(lv.checkbox(scr3)) if i == 0: checkbox[i].align_to(label6, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) else: checkbox[i].align_to(checkbox[i - 1], lv.ALIGN.OUT_BOTTOM_LEFT, 0, 10) checkbox[i].set_text(checkbox_lbl[i]) if flag == 'edit': if i in temp_trigger_item['daysoweek']: checkbox[i].add_state(lv.STATE.CHECKED) elif flag == 'new': checkbox[i].add_state(lv.STATE.CHECKED) if flag == 'edit': del_btn = lv.btn(scr3) del_btn_lbl = lv.label(del_btn) del_btn_lbl.set_text('Delete This Trigger!') del_btn.set_style_bg_color(red, 0) del_btn.align_to(checkbox[5], lv.ALIGN.BOTTOM_MID, 80, 100) lv.timer_create(lambda task: refresh_label(), 900, 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 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)