def __init__(self): self.last_id = -1 # # Show cursor on the clicked point # chart = lv.chart(lv.scr_act()) chart.set_size(200, 150) chart.align(lv.ALIGN.CENTER, 0, -10) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 5, True, 40) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 10, 5, 10, 1, True, 30) chart.add_event_cb(self.event_cb, lv.EVENT.ALL, None) chart.refresh_ext_draw_size() self.cursor = chart.add_cursor(lv.palette_main(lv.PALETTE.BLUE), lv.DIR.LEFT | lv.DIR.BOTTOM) self.ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) self.ser_p = [] for i in range(10): self.ser_p.append(lv.rand(10, 90)) self.ser.y_points = self.ser_p newser = chart.get_series_next(None) # print("length of data points: ",len(newser.points)) chart.set_zoom_x(500) label = lv.label(lv.scr_act()) label.set_text("Click on a point") label.align_to(chart, lv.ALIGN.OUT_TOP_MID, 0, -5)
def lv_example_chart_8(): #Create a stacked_area_chart.obj stacked_area_chart.obj = lv.chart(lv.scr_act()) stacked_area_chart.obj.set_size(200, 150) stacked_area_chart.obj.center() stacked_area_chart.obj.set_type(lv.chart.TYPE.LINE) stacked_area_chart.obj.set_div_line_count(5, 7) stacked_area_chart.obj.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) # Set range to 0 to 100 for percentages. Draw ticks stacked_area_chart.obj.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 100) stacked_area_chart.obj.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 3, 0, 5, 1, True, 30) #Set point size to 0 so the lines are smooth stacked_area_chart.obj.set_style_size(0, 0, lv.PART.INDICATOR) # Add some data series stacked_area_chart.series_list[0] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) stacked_area_chart.series_list[1] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.BLUE), lv.chart.AXIS.PRIMARY_Y) stacked_area_chart.series_list[2] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.GREEN), lv.chart.AXIS.PRIMARY_Y) for point in range(10): # Make some random data vals = [lv.rand(10, 20), lv.rand(20, 30), lv.rand(20, 30)] fixed_point_shift = 5 total = vals[0] + vals[1] + vals[2] draw_heights = [0, 0, 0] int_sum = 0 decimal_sum = 0 # Fixed point cascade rounding ensures percentages add to 100 for series_index in range(3): decimal_sum += int( ((vals[series_index] * 100) << fixed_point_shift) // total) int_sum += int((vals[series_index] * 100) / total) modifier = (round_fixed_point(decimal_sum, fixed_point_shift) >> fixed_point_shift) - int_sum # The draw heights are equal to the percentage of the total each value is + the cumulative sum of the previous percentages. # The accumulation is how the values get "stacked" draw_heights[series_index] = int(int_sum + modifier) # Draw to the series in the reverse order to which they were initialised. # Without this the higher values will draw on top of the lower ones. # This is because the Z-height of a series matches the order it was initialised stacked_area_chart.obj.set_next_value( stacked_area_chart.series_list[3 - series_index - 1], draw_heights[series_index]) stacked_area_chart.obj.refresh()
def page_obj_init(self, par): self.anim_obj = lv.obj(par) self.anim_obj.set_size(30, 30) self.anim_obj.set_align(lv.ALIGN.TOP_LEFT) self.anim_obj.clear_flag(lv.obj.FLAG.SCROLLABLE) self.anim_obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), lv.PART.MAIN) self.anim_obj.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 0, 1) self.p1_label = lv.label(par) self.p2_label = lv.label(par) self.p1_label.set_text("p1:0") self.p2_label.set_text("p2:0") self.p1_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 1, 1) self.p2_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1, lv.GRID_ALIGN.START, 2, 1) self.p1_slider = lv.slider(par) self.p2_slider = lv.slider(par) self.p1_slider.set_range(0, 1024) self.p2_slider.set_range(0, 1024) self.p1_slider.set_style_pad_all(2, lv.PART.KNOB) self.p2_slider.set_style_pad_all(2, lv.PART.KNOB) self.p1_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None) self.p2_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None) self.p1_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.START, 1, 1) self.p2_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1, lv.GRID_ALIGN.START, 2, 1) self.run_btn = lv.btn(par) self.run_btn.add_event_cb(self.run_btn_event_handler, lv.EVENT.CLICKED, None) btn_label = lv.label(self.run_btn) btn_label.set_text(lv.SYMBOL.PLAY) btn_label.center() self.run_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 1, lv.GRID_ALIGN.STRETCH, 1, 2) self.chart = lv.chart(par) self.chart.set_style_pad_all(0, lv.PART.MAIN) self.chart.set_style_size(0, lv.PART.INDICATOR) self.chart.set_type(lv.chart.TYPE.SCATTER) self.ser1 = self.chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) self.chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1024) self.chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 1024) self.chart.set_point_count(CHART_POINTS_NUM) self.chart.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 3, lv.GRID_ALIGN.STRETCH, 3, 1)
def chart_init(self): """ Initialize the temp chart on the screen """ chart = lv.chart(self.main_scr) chart.set_size(GUI.CHART_WIDTH, GUI.CHART_HEIGHT) # width, height pixel of the chart chart.align(lv.scr_act(), lv.ALIGN.IN_BOTTOM_MID, 0, 0) chart.set_type(lv.chart.TYPE.LINE) chart.set_style(lv.chart.STYLE.MAIN, lv.style_plain) chart.set_series_opa(lv.OPA.COVER) chart.set_series_width(3) chart_series = chart.add_series(lv.color_make(0xFF, 0, 0)) return chart, chart_series
def __init__(self, app, page): self.app = app self.page = page self.chart = lv.chart(page) self.chart.set_width(page.get_width() - 50) self.chart.align(page, lv.ALIGN.CENTER, 0, 0) self.series1 = self.chart.add_series(lv.color_hex(0xFF0000)) self.chart.set_type(self.chart.TYPE.POINT | self.chart.TYPE.LINE) self.chart.set_series_width(3) self.chart.set_range(0, 100) self.chart.init_points(self.series1, 10) self.chart.set_points(self.series1, [10, 20, 30, 20, 10, 40, 50, 90, 95, 90]) animate_chart(self.chart, 100, 1000)
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
dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) if dsc.part == lv.PART.TICKS and dsc.id == lv.chart.AXIS.PRIMARY_X: month = [ "Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec" ] # dsc.text is defined char text[16], I must therefore convert the Python string to a byte_array dsc.text = bytes(month[dsc.value], "ascii") # # Add ticks and labels to the axis and demonstrate scrolling # # Create a chart chart = lv.chart(lv.scr_act()) chart.set_size(200, 150) chart.center() chart.set_type(lv.chart.TYPE.BAR) chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 100) chart.set_range(lv.chart.AXIS.SECONDARY_Y, 0, 400) chart.set_point_count(12) chart.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) # Add ticks and label to every axis chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 10, 5, 12, 3, True, 40) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 2, True, 50) chart.set_axis_tick(lv.chart.AXIS.SECONDARY_Y, 10, 5, 3, 4, True, 50) # Zoom in a little in X chart.set_zoom_x(800)
def visuals_create(parent): page = lv.page.__cast__(parent) lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_TOP) disp_size = display.get_size_category() grid_h_chart = lv.page.get_height_grid(page, 1, 1) if disp_size <= lv.DISP_SIZE.LARGE: grid_w_chart = lv.page.get_width_grid(page, 1, 1) else: grid_w_chart = lv.page.get_width_grid(page, 1, 2) chart = lv.chart(parent, None) chart.add_style(lv.chart.PART.BG, style_box) if disp_size <= lv.DISP_SIZE.SMALL: chart.set_style_local_text_font(lv.chart.PART.SERIES_BG, lv.STATE.DEFAULT, lv.theme_get_font_small()) chart.set_drag_parent(True) chart.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Line chart") chart.set_width_margin(grid_w_chart) chart.set_height_margin(grid_h_chart) chart.set_div_line_count(3, 0) chart.set_point_count(8) chart.set_type(lv.chart.TYPE.LINE) if disp_size > lv.DISP_SIZE.SMALL: chart.set_style_local_pad_left(lv.chart.PART.BG, lv.STATE.DEFAULT, 4 * (LV_DPI // 10)) chart.set_style_local_pad_bottom(lv.chart.PART.BG, lv.STATE.DEFAULT, 3 * (LV_DPI // 10)) chart.set_style_local_pad_right(lv.chart.PART.BG, lv.STATE.DEFAULT, 2 * (LV_DPI // 10)) chart.set_style_local_pad_top(lv.chart.PART.BG, lv.STATE.DEFAULT, 2 * (LV_DPI // 10)) chart.set_y_tick_length(0, 0) chart.set_x_tick_length(0, 0) chart.set_y_tick_texts("600\n500\n400\n300\n200", 0, lv.chart.AXIS.DRAW_LAST_TICK) chart.set_x_tick_texts("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug", 0, lv.chart.AXIS.DRAW_LAST_TICK) s1 = chart.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY) s2 = chart.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY) chart.set_next(s1, 10) chart.set_next(s1, 90) chart.set_next(s1, 30) chart.set_next(s1, 60) chart.set_next(s1, 10) chart.set_next(s1, 90) chart.set_next(s1, 30) chart.set_next(s1, 60) chart.set_next(s1, 10) chart.set_next(s1, 90) chart.set_next(s2, 32) chart.set_next(s2, 66) chart.set_next(s2, 5) chart.set_next(s2, 47) chart.set_next(s2, 32) chart.set_next(s2, 32) chart.set_next(s2, 66) chart.set_next(s2, 5) chart.set_next(s2, 47) chart.set_next(s2, 66) chart.set_next(s2, 5) chart.set_next(s2, 47) chart2 = lv.chart(parent, chart) chart2.set_type(lv.chart.TYPE.COLUMN) chart2.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Column chart") s1 = chart2.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY) s2 = chart2.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY) chart2.set_next(s1, 10) chart2.set_next(s1, 90) chart2.set_next(s1, 30) chart2.set_next(s1, 60) chart2.set_next(s1, 10) chart2.set_next(s1, 90) chart2.set_next(s1, 30) chart2.set_next(s1, 60) chart2.set_next(s1, 10) chart2.set_next(s1, 90) chart2.set_next(s2, 32) chart2.set_next(s2, 66) chart2.set_next(s2, 5) chart2.set_next(s2, 47) chart2.set_next(s2, 32) chart2.set_next(s2, 32) chart2.set_next(s2, 66) chart2.set_next(s2, 5) chart2.set_next(s2, 47) chart2.set_next(s2, 66) chart2.set_next(s2, 5) chart2.set_next(s2, 47) if disp_size <= lv.DISP_SIZE.SMALL: grid_w_meter = lv.page.get_width_grid(page, 1, 1) elif disp_size <= lv.DISP_SIZE.MEDIUM: grid_w_meter = lv.page.get_width_grid(page, 2, 1) else: grid_w_meter = lv.page.get_width_grid(page, 3, 1) meter_h = lv.page.get_height_fit(page) if grid_w_meter < meter_h: meter_size = grid_w_meter else: meter_size = meter_h lmeter = lv.linemeter(parent, None) lmeter.set_drag_parent(True) lmeter.set_value(50) lmeter.set_size(meter_size, meter_size) lmeter.add_style(lv.linemeter.PART.MAIN, style_box) lmeter.set_style_local_value_str(lv.linemeter.PART.MAIN, lv.STATE.DEFAULT, "Line meter") label = lv.label(lmeter, None) label.align(lmeter, lv.ALIGN.CENTER, 0, 0) label.set_style_local_text_font(lv.label.PART.MAIN, lv.STATE.DEFAULT, lv.theme_get_font_title()) a_lm = lv.anim_t() a_lm.init() a_lm.set_custom_exec_cb(lambda a, val: linemeter_anim(a, lmeter, val)) a_lm.set_values(0, 100) a_lm.set_time(4000) a_lm.set_playback_time(1000) a_lm.set_repeat_count(LV_ANIM_REPEAT_INFINITE) lv.anim_t.start(a_lm) gauge = lv.gauge(parent, None) gauge.set_drag_parent(True) gauge.set_size(meter_size, meter_size) gauge.add_style(lv.gauge.PART.MAIN, style_box) gauge.set_style_local_value_str(lv.gauge.PART.MAIN, lv.STATE.DEFAULT, "Gauge") label = lv.label(gauge, label) label.align(gauge, lv.ALIGN.CENTER, 0, grid_w_meter // 3) a_ga = lv.anim_t() a_ga.init() a_ga.set_custom_exec_cb(lambda a, val: linemeter_anim(a, lmeter, val)) a_ga.set_values(0, 100) a_ga.set_time(4000) a_ga.set_playback_time(1000) a_ga.set_repeat_count(LV_ANIM_REPEAT_INFINITE) a_ga.set_custom_exec_cb(lambda a, val: gauge_anim(a, gauge, val)) lv.anim_t.start(a_ga) arc = lv.arc(parent, None) arc.set_drag_parent(True) arc.set_bg_angles(0, 360) arc.set_rotation(270) arc.set_angles(0, 0) arc.set_size(meter_size, meter_size) arc.add_style(lv.arc.PART.BG, style_box) arc.set_style_local_value_str(lv.arc.PART.BG, lv.STATE.DEFAULT, "Arc") label = lv.label(arc) label.align(arc, lv.ALIGN.CENTER, 0, 0) a_arc = lv.anim_t() a_arc.init() a_arc.set_custom_exec_cb(lambda a_arc, val: anim_phase1(a_arc, arc, val)) a_arc.set_values(0, 360) a_arc.set_ready_cb(lambda a: arc_phase1_ready_cb(a, arc)) # a_arc.set_repeat_count(LV_ANIM_REPEAT_INFINITE) a_arc.set_time(1000) lv.anim_t.start(a_arc) # Create a bar and use the backgrounds value style property to display the current value bar_h = lv.cont(parent, None) bar_h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) bar_h.add_style(lv.cont.PART.MAIN, style_box) bar_h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Bar") if disp_size <= lv.DISP_SIZE.SMALL: bar_h.set_width(lv.page_get_width_grid(page, 1, 1)) elif disp_size <= lv.DISP_SIZE.MEDIUM: bar_h.set_width(lv.page.get_width_grid(page, 2, 1)) else: bar_h.set_width(lv.page.get_width_grid(parent, 3, 2)) bar = lv.bar(bar_h, None) bar.set_width(lv.cont.get_width_fit(bar_h)) bar.set_style_local_value_font(lv.bar.PART.BG, lv.STATE.DEFAULT, lv.theme_get_font_small()) bar.set_style_local_value_align(lv.bar.PART.BG, lv.STATE.DEFAULT, lv.ALIGN.OUT_BOTTOM_MID) bar.set_style_local_value_ofs_y(lv.bar.PART.BG, lv.STATE.DEFAULT, LV_DPI // 20) bar.set_style_local_margin_bottom(lv.bar.PART.BG, lv.STATE.DEFAULT, LV_DPI // 7) bar.align(None, lv.ALIGN.CENTER, 0, 0) bar.set_value(30, lv.ANIM.OFF) led_h = lv.cont(parent, None) led_h.set_layout(lv.LAYOUT.PRETTY_MID) if disp_size <= lv.DISP_SIZE.SMALL: led_h.set_width(lv.page.get_width_grid(page, 1, 1)) elif disp_size <= lv.DISP_SIZE.MEDIUM: led_h.set_width(lv.page.get_width_grid(page, 2, 1)) else: led_h.set_width(lv.page.get_width_grid(page, 3, 1)) led_h.set_height(lv.obj.get_height(lv.obj.__cast__(bar_h))) led_h.add_style(lv.cont.PART.MAIN, style_box) led_h.set_drag_parent(True) led_h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "LEDs") led = lv.led(led_h, None) led_size = lv.obj.get_height_fit(lv.obj.__cast__(led_h)) led.set_size(led_size, led_size) led.off() led = lv.led(led_h, led) led.set_bright((LV_LED_BRIGHT_MAX - LV_LED_BRIGHT_MIN) // 2 + LV_LED_BRIGHT_MIN) led = lv.led(led_h, led) led.on() if disp_size == lv.DISP_SIZE.MEDIUM: led_h.add_protect(lv.PROTECT.POS) led_h.align( bar_h, lv.ALIGN.OUT_BOTTOM_MID, 0, lv.obj.get_style_margin_top(lv.obj.__cast__(led_h), lv.obj.PART.MAIN) + lv.obj.get_style_pad_inner(parent, lv.page.PART.SCROLLABLE)) task = lv.task_create_basic() task.set_cb(lambda task: bar_anim(task, bar)) task.set_period(100) task.set_prio(lv.TASK_PRIO.LOWEST)
#!/opt/bin/lv_micropython -i import time import lvgl as lv import display_driver from lv_colors import lv_colors # create a chart chart = lv.chart(lv.scr_act(), None) chart.set_size(200, 150) chart.align(None, lv.ALIGN.CENTER, 0, 0) chart.set_type(lv.chart.TYPE.LINE) ser1 = chart.add_series(lv_colors.RED) ser2 = chart.add_series(lv_colors.GREEN) # Set next points on ser1 chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 10) chart.set_next(ser1, 30) chart.set_next(ser1, 70) chart.set_next(ser1, 90) # Set points on ser2 chart.set_points(ser2, [90, 70, 65, 65, 65, 65, 65, 65, 65, 65])
def __init__(self, parent, x_pos, y_pos, gui_ctrl): super().__init__(parent) self._gui_ctrl = gui_ctrl btn_style = self.get_style(lv.tabview.STYLE.BTN_REL) btn_style_or = lv.style_t() lv.style_copy(btn_style_or, btn_style) btn_style.body.padding.left = (parent.get_width() - x_pos) // 5 // 2 btn_style.body.padding.right = (parent.get_width() - x_pos) // 5 // 2 self.set_style(lv.tabview.STYLE.BTN_REL, btn_style) self.set_size(parent.get_width() - x_pos, parent.get_height() - y_pos) self.set_pos(x_pos, y_pos) self.set_anim_time(0) self.set_sliding(False) self.set_btns_pos(lv.tabview.BTNS_POS.LEFT) self.set_event_cb(self._tab_change_handler) self._t_start = self.add_tab("New Session") self._t_cal = self.add_tab("Calibration") self._t_other = self.add_tab("Other") self._t_done = self.add_tab("Done") self.set_tab_act(3, lv.ANIM.OFF) # Session screen # Stat new session self._new_sess = lv.cont(self._t_start) self._new_sess.set_fit(lv.FIT.FLOOD) self._new_sess.set_layout(lv.LAYOUT.PRETTY) self._new_session_label = RealignLabel( self._new_sess, "Set info, and start a new measuring session!", False) self._material_sel = lv.roller(self._new_sess) self._material_sel.set_options( "\n".join(material for material in MATERIAL_TYPE), lv.roller.MODE.INIFINITE) self._thickness_sel = lv.roller(self._new_sess) self._thickness_sel.set_options( "\n".join(thickness for thickness in THICKNESS_TYPE), lv.roller.MODE.INIFINITE) self._start_btn = TextBtn(self._new_sess, "Start", self._new_sess_cb) self._start_btn.set_style(lv.btn.STYLE.REL, btn_style_or) # Measuring Screen self._session = lv.cont(self._t_start) self._session.set_fit(lv.FIT.FLOOD) self._session.set_layout(lv.LAYOUT.PRETTY) self._session_label = RealignLabel(self._session, "\n\n\n", True) self._start_measure_btn = TextBtn(self._session, "New Panel", self._start_measure_cb) self._start_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or) self._done_measure_btn = TextBtn(self._session, "Finish", self._done_measure_cb) self._done_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or) self._re_measure_btn = TextBtn(self._session, "Re-measure", self._re_measure_cb) self._re_measure_btn.set_style(lv.btn.STYLE.REL, btn_style_or) self._chart = lv.chart(self._session) self._chart.set_height(90) self._chart.set_point_count(700) self._chart.set_range(11000, 13000) self._ser1 = self._chart.add_series(lv.color_hex(0x0000b3)) self._ser2 = self._chart.add_series(lv.color_hex(0xe60000)) self._ser3 = self._chart.add_series(lv.color_hex(0x00e600)) self._ser4 = self._chart.add_series(lv.color_hex(0xffffff)) self._session.set_hidden(True) lv.page.glue_obj(self._new_sess, True) lv.page.glue_obj(self._session, True) self._preload_cont = lv.cont(self._t_start) self._preload_cont.set_fit(lv.FIT.FLOOD) self._preload_cont.set_layout(lv.LAYOUT.CENTER) self._preload = lv.preload(self._preload_cont) self._preload_cont.set_hidden(True) # Calibration Screen self._cal_label = RealignLabel(self._t_cal, "Output: \n", False) self._cal_num_input = NumTextArea(self._t_cal, self.ta_test) self._cal_num_input.set_auto_realign(True) self._cal_num_input.align(self._cal_label, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0) self._set_cal_1 = TextBtn(self._t_cal, "Set Amp 1", self._set_amp_1_cb) self._set_cal_1.set_style(lv.btn.STYLE.REL, btn_style_or) self._set_cal_1.align(self._cal_num_input, lv.ALIGN.OUT_RIGHT_MID, 0, 0) self._set_cal_2 = TextBtn(self._t_cal, "Set Amp 2", self._set_amp_2_cb) self._set_cal_2.set_style(lv.btn.STYLE.REL, btn_style_or) self._set_cal_2.align(self._set_cal_1, lv.ALIGN.OUT_RIGHT_MID, 0, 0) self._kb = lv.kb(self._t_cal) self._kb.set_map(["1", "2", "3","\n","4","5", "6",\ "\n","7", "8", "9","\n","0",".","Bksp",""]) self._kb.set_height(180) self._kb.set_y(85) self._kb.set_ta(self._cal_num_input) # Laser Off Screen self._text = RealignLabel(self._t_done, "Laser Off", False) # Other Screen self._cal = lv.calendar(self._t_other) return
def createPage(self): global value global sound_ttf_alive print("Enter SoundTTF") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) win.set_style_pad_right(30, 0) title = lv.label(win) title.set_text("Sound TTF") title.set_style_text_color(lv.color_white(), 0) title.set_style_text_font(lv.font_montserrat_28, 0) title.align(lv.ALIGN.TOP_LEFT, 20, 0) decibel = lv.label(win) decibel.set_text(str(value) + "dB") decibel.set_style_text_color(lv.color_make(0xFF, 0xA8, 0x48), 0) decibel.set_style_text_font(lv.font_montserrat_28, 0) decibel.align(lv.ALIGN.TOP_RIGHT, 0, 0) chart = lv.chart(win) chart.set_type(lv.chart.TYPE.BAR) chart.set_style_border_opa(0, 0) chart.set_style_bg_opa(0, 0) chart.set_style_line_opa(0, 0) chart.set_width(280) chart.set_height(160) chart.set_div_line_count(6, 0) chart.set_point_count(12) chart.align(lv.ALIGN.BOTTOM_MID, 20, -5) chart.add_event_cb(chart_event_cb, lv.EVENT.DRAW_PART_END, None) ser1 = chart.add_series(lv.color_make(0x56, 0x56, 0x56), lv.chart.AXIS.PRIMARY_Y) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: sound_ttf_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.set_ext_click_area(30) backImg.add_event_cb( lambda e: sound_ttf_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb( lambda e: sound_ttf_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) sound_ttf_alive = True
scr = lv.obj() lv.scr_load(scr) cont = lv.cont(scr) cont.set_auto_realign(False) cont.set_fit2(lv.FIT.PARENT, lv.FIT.TIGHT) cont.set_layout(lv.LAYOUT.PRETTY_TOP) sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect('norzam5001-93A8', '74221486') while sta_if.isconnected() == False: print('.') chart = lv.chart(cont) chart.set_size(200, 300) chart.set_type(lv.chart.TYPE.LINE) ser1 = chart.add_series(lv_colors.RED) import json # binance data while True: data = urequest.get( 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT') print(data.content) chart.set_next(ser1, float((json.loads(data.content))['price'])) time.sleep(10)
'''Main screen : lv.scr_act()''' lv.scr_act().set_style_bg_color(lv.color_hex(0x000000),0) label = lv.label(lv.scr_act()) label.set_style_text_font(lv.font_montserrat_28,0) label.set_text("{} : {:2} ".format(data_j['symbol'], float(data_j['price']))) label.align_to(lv.scr_act(), lv.ALIGN.TOP_MID,0,10) label.set_style_text_color(lv.color_hex(0x00eeff),0) label_log = lv.label(lv.scr_act()) label_log.align_to(lv.scr_act(), lv.ALIGN.BOTTOM_LEFT,0,-10) label_log.set_text("Log") label_log.set_style_text_color(lv.color_hex(0x1aec1a),0) '''Chart minute : add chart''' chart = lv.chart(lv.scr_act()) chart.set_style_bg_color(lv.color_hex(0x000000),0) chart.set_style_line_color(lv.color_hex(0x1aec1a),0) chart.set_style_border_color(lv.color_hex(0x1aec1a),0) chart.set_size(220,150) chart.align_to(label, lv.ALIGN.OUT_BOTTOM_MID,20,10) chart.set_type(lv.chart.TYPE.LINE) #chart.set_update_mode(lv.chart.UPDATE_MODE.CIRCULAR) chart.set_update_mode(lv.chart.UPDATE_MODE.SHIFT) chart.set_point_count(20) chart.set_div_line_count(0,0) '''Chart minute : create series''' ser1 = chart.add_series(lv.color_hex(0x00eeff), lv.chart.AXIS.PRIMARY_Y) '''Chart minute : calculate chart range'''
slider.align(btn1, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 20) # Align below the first button slider.set_value(30, False) # Set the current value """ ADD A DROP DOWN LIST """ ddlist = lv.ddlist(scr) # Create a drop down list ddlist.align(slider, lv.ALIGN.OUT_RIGHT_TOP, 50, 0) # Align next to the slider ddlist.set_top(True) # Enable to be on the top when clicked ddlist.set_options("None\nLittle\nHalf\nA lot\nAll")# Set the options ddlist.set_event_cb(ddlist_event_cb) # Set function to call on new option is chosen """ CREATE A CHART """ chart = lv.chart(scr) # Create the chart chart.set_size(round(scr.get_width() / 2), round(scr.get_width() / 4)) # Set the size chart.align(slider, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 20) # Align below the slider chart.set_series_width(3) # Set the line width # Add a RED data series and set some points dl1 = chart.add_series(lv.color_hex(0xFF0000)) chart.set_next(dl1, 10) chart.set_next(dl1, 25) chart.set_next(dl1, 45) chart.set_next(dl1, 80) # Add a BLUE data series and set some points dl2 = chart.add_series(lv.color_hex(0x4070C0)) chart.set_next(dl2, 10) chart.set_next(dl2, 25)