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 event_cb(e): code = e.get_code() obj = e.get_target() if code == lv.EVENT.DRAW_PART_BEGIN: dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) # Change the draw descriptor the 2nd button if dsc.id == 1: dsc.rect_dsc.radius = 0 if obj.get_selected_btn() == dsc.id: dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.GREY, 3) else: dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE) dsc.rect_dsc.shadow_width = 6 dsc.rect_dsc.shadow_ofs_x = 3 dsc.rect_dsc.shadow_ofs_y = 3 dsc.label_dsc.color = lv.color_white() # Change the draw descriptor the 3rd button elif dsc.id == 2: dsc.rect_dsc.radius = lv.RADIUS.CIRCLE if obj.get_selected_btn() == dsc.id: dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.RED, 3) else: dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED) dsc.label_dsc.color = lv.color_white() elif dsc.id == 3: dsc.label_dsc.opa = lv.OPA.TRANSP # Hide the text if any if code == lv.EVENT.DRAW_PART_END: dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param()) # Add custom content to the 4th button when the button itself was drawn if dsc.id == 3: # LV_IMG_DECLARE(img_star); header = lv.img_header_t() res = lv.img.decoder_get_info(img_star_argb, header) if res != lv.RES.OK: print("error when getting image header") return else: a = lv.area_t() a.x1 = dsc.draw_area.x1 + (dsc.draw_area.get_width() - header.w) // 2 a.x2 = a.x1 + header.w - 1 a.y1 = dsc.draw_area.y1 + (dsc.draw_area.get_height() - header.h) // 2 a.y2 = a.y1 + header.h - 1 img_draw_dsc = lv.draw_img_dsc_t() img_draw_dsc.init() img_draw_dsc.recolor = lv.color_black() if obj.get_selected_btn() == dsc.id: img_draw_dsc.recolor_opa = lv.OPA._30 lv.draw_img(a, dsc.clip_area, img_star_argb, img_draw_dsc)
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 __init__(self): super().__init__() self.init() # Default color is gray self.set_bg_color(lv.palette_main(lv.PALETTE.GREY)) # Child elements are centered self.set_layout(lv.LAYOUT_FLEX.value) self.set_flex_main_place(lv.FLEX_ALIGN.CENTER) self.set_flex_cross_place(lv.FLEX_ALIGN.CENTER) self.set_flex_track_place(lv.FLEX_ALIGN.CENTER)
def event_cb(e): # The original target of the event. Can be the buttons or the container target = e.get_target() # print(type(target)) # If container was clicked do nothing if type(target) != type(lv.btn()): return # Make the clicked buttons red target.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
def event_cb(self, e): code = e.get_code() chart = lv.chart.__cast__(e.get_target()) if code == lv.EVENT.VALUE_CHANGED: # print("last_id: ",self.last_id) self.last_id = chart.get_pressed_point() if self.last_id != lv.CHART_POINT.NONE: p = lv.point_t() chart.get_point_pos_by_id(self.ser, self.last_id, p) chart.set_cursor_point(self.cursor, None, self.last_id) elif code == lv.EVENT.DRAW_PART_END: # print("EVENT.DRAW_PART_END") dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) # if dsc.p1 and dsc.p2: # print("p1, p2", dsc.p1,dsc.p2) # print("p1.y, p2.y", dsc.p1.y, dsc.p2.y) # print("last_id: ",self.last_id) if dsc.part == lv.PART.CURSOR and dsc.p1 and dsc.p2 and dsc.p1.y == dsc.p2.y and self.last_id >= 0: v = self.ser_p[self.last_id] # print("value: ",v) value_txt = str(v) size = lv.point_t() lv.txt_get_size(size, value_txt, lv.font_default(), 0, 0, lv.COORD.MAX, lv.TEXT_FLAG.NONE) a = lv.area_t() a.y2 = dsc.p1.y - 5 a.y1 = a.y2 - size.y - 10 a.x1 = dsc.p1.x + 10 a.x2 = a.x1 + size.x + 10 draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() draw_rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE) draw_rect_dsc.radius = 3 lv.draw_rect(a, dsc.clip_area, draw_rect_dsc) draw_label_dsc = lv.draw_label_dsc_t() draw_label_dsc.init() draw_label_dsc.color = lv.color_white() a.x1 += 5 a.x2 -= 5 a.y1 += 5 a.y2 -= 5 lv.draw_label(a, dsc.clip_area, draw_label_dsc, value_txt, None)
def __init__(self): super().__init__() # Initialize the styles self.style_btn = lv.style_t() self.style_btn.init() self.style_btn.set_bg_color(lv.palette_main(lv.PALETTE.GREEN)) self.style_btn.set_border_color(lv.palette_darken(lv.PALETTE.GREEN, 3)) self.style_btn.set_border_width(3) # This theme is based on active theme th_act = lv.theme_get_from_obj(lv.scr_act()) # This theme will be applied only after base theme is applied self.set_parent(th_act)
def draw_part_event_cb(e): obj = lv.table.__cast__(e.get_target()) dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) # If the cells are drawn../ if dsc.part == lv.PART.ITEMS: row = dsc.id // obj.get_col_cnt() col = dsc.id - row * obj.get_col_cnt() # Make the texts in the first cell center aligned if row == 0: dsc.label_dsc.align = lv.TEXT_ALIGN.CENTER dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE).color_mix( dsc.rect_dsc.bg_color, lv.OPA._20) dsc.rect_dsc.bg_opa = lv.OPA.COVER # In the first column align the texts to the right elif col == 0: dsc.label_dsc.flag = lv.TEXT_ALIGN.RIGHT # Make every 2nd row grayish if row != 0 and (row % 2) == 0: dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.GREY).color_mix( dsc.rect_dsc.bg_color, lv.OPA._10) dsc.rect_dsc.bg_opa = lv.OPA.COVER
def draw_event_cb(e): dsc = e.get_draw_part_dsc() if dsc.part == lv.PART.ITEMS: obj = e.get_target() ser = obj.get_series_next(None) cnt = obj.get_point_count() # print("cnt: ",cnt) # Make older value more transparent dsc.rect_dsc.bg_opa = (lv.OPA.COVER * dsc.id) // (cnt - 1) # Make smaller values blue, higher values red # x_array = chart.get_x_array(ser) # y_array = chart.get_y_array(ser) # dsc->id is the tells drawing order, but we need the ID of the point being drawn. start_point = chart.get_x_start_point(ser) # print("start point: ",start_point) p_act = (start_point + dsc.id) % cnt # Consider start point to get the index of the array # print("p_act", p_act) x_opa = (x_array[p_act] * lv.OPA._50) // 200 y_opa = (y_array[p_act] * lv.OPA._50) // 1000 dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED).color_mix( lv.palette_main(lv.PALETTE.BLUE), x_opa + y_opa)
def set_value(indic, v): meter.set_indicator_value(indic, v) # # A clock from a meter # meter = lv.meter(lv.scr_act()) meter.set_size(220, 220) meter.center() # Create a scale for the minutes # 61 ticks in a 360 degrees range (the last and the first line overlaps) scale_min = meter.add_scale() meter.set_scale_ticks(scale_min, 61, 1, 10, lv.palette_main(lv.PALETTE.GREY)) meter.set_scale_range(scale_min, 0, 60, 360, 270) # Create another scale for the hours. It's only visual and contains only major ticks scale_hour = meter.add_scale() meter.set_scale_ticks(scale_hour, 12, 0, 0, lv.palette_main(lv.PALETTE.GREY)) # 12 ticks meter.set_scale_major_ticks(scale_hour, 1, 2, 20, lv.color_black(), 10) # Every tick is major meter.set_scale_range(scale_hour, 1, 12, 330, 300) # [1..12] values in an almost full circle # LV_IMG_DECLARE(img_hand) # Add the hands from images indic_min = meter.add_needle_img(scale_min, img_hand_min_dsc, 5, 5)
# # A meter with multiple arcs # meter = lv.meter(lv.scr_act()) meter.center() meter.set_size(200, 200) # Remove the circle from the middle meter.remove_style(None, lv.PART.INDICATOR) # Add a scale first scale = meter.add_scale() meter.set_scale_ticks(scale, 11, 2, 10, lv.palette_main(lv.PALETTE.GREY)) meter.set_scale_major_ticks(scale, 1, 2, 30, lv.color_hex3(0xeee), 10) meter.set_scale_range(scale, 0, 100, 270, 90) # Add a three arc indicator indic1 = meter.add_arc(scale, 10, lv.palette_main(lv.PALETTE.RED), 0) indic2 = meter.add_arc(scale, 10, lv.palette_main(lv.PALETTE.GREEN), -10) indic3 = meter.add_arc(scale, 10, lv.palette_main(lv.PALETTE.BLUE), -20) # Create an animation to set the value a1 = lv.anim_t() a1.init() a1.set_values(0, 100) a1.set_time(2000) a1.set_repeat_delay(100) a1.set_playback_delay(100)
# Create an array for the points of the line line_points = [{ "x": 5, "y": 5 }, { "x": 70, "y": 70 }, { "x": 120, "y": 10 }, { "x": 180, "y": 60 }, { "x": 240, "y": 10 }] # Create style style_line = lv.style_t() style_line.init() style_line.set_line_width(8) style_line.set_line_color(lv.palette_main(lv.PALETTE.BLUE)) style_line.set_line_rounded(True) # Create a line and apply the new style line1 = lv.line(lv.scr_act()) line1.set_points(line_points, 5) # Set the points line1.add_style(style_line, 0) line1.center()
# style_bg = lv.style_t() style_bg.init() style_bg.set_pad_all(0) style_bg.set_pad_gap(0) style_bg.set_clip_corner(True) style_bg.set_radius(lv.RADIUS.CIRCLE) style_bg.set_border_width(0) style_btn = lv.style_t() style_btn.init() style_btn.set_radius(0) style_btn.set_border_width(1) style_btn.set_border_opa(lv.OPA._50) style_btn.set_border_color(lv.palette_main(lv.PALETTE.GREY)) style_btn.set_border_side(lv.BORDER_SIDE.INTERNAL) style_btn.set_radius(0) map = [lv.SYMBOL.LEFT, "1", "2", "3", "4", "5", lv.SYMBOL.RIGHT, ""] btnm = lv.btnmatrix(lv.scr_act()) btnm.set_map(map) btnm.add_style(style_bg, 0) btnm.add_style(style_btn, lv.PART.ITEMS) btnm.add_event_cb(event_cb, lv.EVENT.VALUE_CHANGED, None) btnm.set_size(225, 35) # Allow selecting on one number at time btnm.set_btn_ctrl_all(lv.btnmatrix.CTRL.CHECKABLE) btnm.clear_btn_ctrl(0, lv.btnmatrix.CTRL.CHECKABLE)
chart.set_size(200, 150) chart.align(lv.ALIGN.CENTER, 0, 0) chart.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) chart.set_style_line_width(0, lv.PART.ITEMS) # Remove the lines chart.set_type(lv.chart.TYPE.SCATTER) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 5, 5, 5, 1, True, 30) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 5, True, 50) chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 200) chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1000) chart.set_point_count(50) ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) x_array = [] y_array = [] for i in range(50): x_array.append(lv.rand(0, 200)) y_array.append(lv.rand(0, 1000)) ser.x_points = x_array ser.y_points = y_array # Create an `lv_timer` to update the chart. timer = lv.timer_create_basic() timer.set_period(100)
#!//opt/bin/lv_micropython -i import time import lvgl as lv import display_driver # # Create LED's with different brightness and color # # Create a LED and switch it OFF led1 = lv.led(lv.scr_act()) led1.align(lv.ALIGN.CENTER, -80, 0) led1.off() # Copy the previous LED and set a brightness led2 = lv.led(lv.scr_act()) led2.align(lv.ALIGN.CENTER, 0, 0) led2.set_brightness(150) led2.set_color(lv.palette_main(lv.PALETTE.RED)) # Copy the previous LED and switch it ON led3 = lv.led(lv.scr_act()) led3.align(lv.ALIGN.CENTER, 80, 0) led3.on()
#!//opt/bin/lv_micropython -i import time import lvgl as lv import display_driver # # Using the background style properties # style = lv.style_t() style.init() style.set_radius(5) # Make a gradient style.set_bg_opa(lv.OPA.COVER) style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1)) style.set_bg_grad_color(lv.palette_main(lv.PALETTE.BLUE)) style.set_bg_grad_dir(lv.GRAD_DIR.VER) # Shift the gradient to the bottom style.set_bg_main_stop(128) style.set_bg_grad_stop(192) # Create an object with the new style obj = lv.obj(lv.scr_act()) obj.add_style(style, 0) obj.center()
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver display_driver.getdisplay_landscape() # # Using the Shadow style properties # style = lv.style_t() style.init() # Set a background color and a radius style.set_radius(5) style.set_bg_opa(lv.OPA.COVER) style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1)) # Add a shadow style.set_shadow_width(8) style.set_shadow_color(lv.palette_main(lv.PALETTE.BLUE)) style.set_shadow_ofs_x(10) style.set_shadow_ofs_y(20) # Create an object with the new style obj = lv.obj(lv.scr_act()) obj.add_style(style, 0) obj.center()
# # Create a transparent canvas with Chroma keying and indexed color format (palette). # # Create a button to better see the transparency btn=lv.btn(lv.scr_act()) # Create a buffer for the canvas cbuf= bytearray(LV_CANVAS_BUF_SIZE_INDEXED_1BIT(CANVAS_WIDTH, CANVAS_HEIGHT)) # Create a canvas and initialize its the palette canvas = lv.canvas(lv.scr_act()) canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.img.CF.INDEXED_1BIT) canvas.set_palette(0, LV_COLOR_CHROMA_KEY) canvas.set_palette(1, lv.palette_main(lv.PALETTE.RED)) # Create colors with the indices of the palette c0 = lv.color_t() c1 = lv.color_t() c0.full = 0 c1.full = 1 # Red background (There is no dedicated alpha channel in indexed images so LV_OPA_COVER is ignored) canvas.fill_bg(c1, lv.OPA.COVER) # Create hole on the canvas for y in range(10,30): for x in range(5,20): canvas.set_px(x, y, c0)
import lvgl as lv import display_driver def set_value(indic, v): meter.set_indicator_value(indic, v) # # A simple meter # meter = lv.meter(lv.scr_act()) meter.center() meter.set_size(200, 200) # Add a scale first scale = meter.add_scale() meter.set_scale_ticks(scale, 51, 2, 10, lv.palette_main(lv.PALETTE.GREY)) meter.set_scale_major_ticks(scale, 10, 4, 15, lv.color_black(), 10) indic = lv.meter_indicator_t() # Add a blue arc to the start indic = meter.add_arc(scale, 3, lv.palette_main(lv.PALETTE.BLUE), 0) meter.set_indicator_start_value(indic, 0) meter.set_indicator_end_value(indic, 20) # Make the tick lines blue at the start of the scale indic = meter.add_scale_lines(scale, lv.palette_main(lv.PALETTE.BLUE), lv.palette_main(lv.PALETTE.BLUE), False, 0) meter.set_indicator_start_value(indic, 0) meter.set_indicator_end_value(indic, 20) # Add a red arc to the end
#!/opt/bin/lv_micropython -i import utime as time import lvgl as lv import display_driver display_driver.getdisplay_landscape() # # Create span # style = lv.style_t() style.init() style.set_border_width(1) style.set_border_color(lv.palette_main(lv.PALETTE.ORANGE)) style.set_pad_all(2) spans = lv.spangroup(lv.scr_act()) spans.set_width(300) spans.set_height(300) spans.center() spans.add_style(style, 0) spans.set_align(lv.TEXT_ALIGN.LEFT) spans.set_overflow(lv.SPAN_OVERFLOW.CLIP) spans.set_indent(20) spans.set_mode(lv.SPAN_MODE.BREAK) span = spans.new_span() span.set_text("china is a beautiful country.") span.style.set_text_color(lv.palette_main(lv.PALETTE.RED)) span.style.set_text_decor(lv.TEXT_DECOR.STRIKETHROUGH
def slider_event_cb(e): # Recolor the image based on the sliders' values color = lv.color_make(red_slider.get_value(), green_slider.get_value(), blue_slider.get_value()) intense = intense_slider.get_value() img1.set_style_img_recolor_opa(intense, 0) img1.set_style_img_recolor(color, 0) # # Demonstrate runtime image re-coloring # # Create 4 sliders to adjust RGB color and re-color intensity red_slider = create_slider(lv.palette_main(lv.PALETTE.RED)) green_slider = create_slider(lv.palette_main(lv.PALETTE.GREEN)) blue_slider = create_slider(lv.palette_main(lv.PALETTE.BLUE)) intense_slider = create_slider(lv.palette_main(lv.PALETTE.GREY)) red_slider.set_value(lv.OPA._20, lv.ANIM.OFF) green_slider.set_value(lv.OPA._90, lv.ANIM.OFF) blue_slider.set_value(lv.OPA._60, lv.ANIM.OFF) intense_slider.set_value(lv.OPA._50, lv.ANIM.OFF) red_slider.align(lv.ALIGN.LEFT_MID, 25, 0) green_slider.align_to(red_slider, lv.ALIGN.OUT_RIGHT_MID, 25, 0) blue_slider.align_to(green_slider, lv.ALIGN.OUT_RIGHT_MID, 25, 0) intense_slider.align_to(blue_slider, lv.ALIGN.OUT_RIGHT_MID, 25, 0) # Now create the actual image
display_driver.getdisplay_landscape() def set_temp(bar, temp): bar.set_value(temp, lv.ANIM.ON) # # A temperature meter example # style_indic = lv.style_t() style_indic.init() style_indic.set_bg_opa(lv.OPA.COVER) style_indic.set_bg_color(lv.palette_main(lv.PALETTE.RED)) style_indic.set_bg_grad_color(lv.palette_main(lv.PALETTE.BLUE)) style_indic.set_bg_grad_dir(lv.GRAD_DIR.VER) bar = lv.bar(lv.scr_act()) bar.add_style(style_indic, lv.PART.INDICATOR) bar.set_size(20, 200) bar.center() bar.set_range(-20, 40) a = lv.anim_t() a.init() a.set_time(3000) a.set_playback_time(3000) a.set_var(bar) a.set_values(-20, 40)
#!//opt/bin/lv_micropython -i import time import lvgl as lv import display_driver # # Using the line style properties # style = lv.style_t() style.init() style.set_line_color(lv.palette_main(lv.PALETTE.GREY)) style.set_line_width(6) style.set_line_rounded(True) # Create an object with the new style obj = lv.line(lv.scr_act()) obj.add_style(style, 0) p = [{"x": 10, "y": 30}, {"x": 30, "y": 50}, {"x": 100, "y": 0}] obj.set_points(p, 3) obj.center()
chart.set_size(200, 150) chart.align(lv.ALIGN.CENTER, 0, 0) chart.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) chart.set_style_line_width(0, lv.PART.ITEMS) # Remove the lines chart.set_type(lv.chart.TYPE.SCATTER) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 5, 5, 5, 1, True, 30) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 5, True, 50) chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 200) chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1000) chart.set_point_count(50) ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) x_array = [] y_array = [] for i in range(50): x_array.append(lv.rand(0, 200)) y_array.append(lv.rand(0, 1000)) ser.x_points = x_array ser.y_points = y_array # Create an `lv_timer` to update the chart. timer = lv.timer_create_basic() timer.set_period(100) timer.set_cb(lambda src: add_data(timer,chart))
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver display_driver.getdisplay_landscape() # # Example of styling the bar # style_bg = lv.style_t() style_indic = lv.style_t() style_bg.init() style_bg.set_border_color(lv.palette_main(lv.PALETTE.BLUE)) style_bg.set_border_width(2) style_bg.set_pad_all(6) # To make the indicator smaller style_bg.set_radius(6) style_bg.set_anim_time(1000) style_indic.init() style_indic.set_bg_opa(lv.OPA.COVER) style_indic.set_bg_color(lv.palette_main(lv.PALETTE.BLUE)) style_indic.set_radius(3) bar = lv.bar(lv.scr_act()) bar.remove_style_all() # To have a clean start bar.add_style(style_bg, 0) bar.add_style(style_indic, lv.PART.INDICATOR) bar.set_size(200, 20)
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver display_driver.getdisplay_landscape() # Create a chart chart = lv.chart(lv.scr_act()) chart.set_size(200, 150) chart.center() chart.set_type(lv.chart.TYPE.LINE) # Show lines and points too # Add two data series ser1 = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) ser2 = chart.add_series(lv.palette_main(lv.PALETTE.GREEN), lv.chart.AXIS.SECONDARY_Y) print(ser2) # Set next points on ser1 chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 10) chart.set_next_value(ser1, 30) chart.set_next_value(ser1, 70) chart.set_next_value(ser1, 90)
import display_driver import time # # Create styles from scratch for buttons. # style_btn = lv.style_t() style_btn_red = lv.style_t() style_btn_pressed = lv.style_t() # Create a simple button style style_btn.init() style_btn.set_radius(10) style_btn.set_bg_opa(lv.OPA.COVER) style_btn.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3)) style_btn.set_bg_grad_color(lv.palette_main(lv.PALETTE.GREY)) style_btn.set_bg_grad_dir(lv.GRAD_DIR.VER) # Add a border style_btn.set_border_color(lv.color_white()) style_btn.set_border_opa(lv.OPA._70) style_btn.set_border_width(2) # Set the text style style_btn.set_text_color(lv.color_white()) # Create a red style. Change only some colors. style_btn_red.init() style_btn_red.set_bg_color(lv.palette_main(lv.PALETTE.RED)) style_btn_red.set_bg_grad_color(lv.palette_lighten(lv.PALETTE.RED, 2))
#!//opt/bin/lv_micropython -i import time import lvgl as lv import display_driver _CANVAS_WIDTH = 200 _CANVAS_HEIGHT = 150 LV_IMG_ZOOM_NONE = 256 rect_dsc = lv.draw_rect_dsc_t() rect_dsc.init() rect_dsc.radius = 10 rect_dsc.bg_opa = lv.OPA.COVER rect_dsc.bg_grad_dir = lv.GRAD_DIR.HOR rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED) rect_dsc.bg_grad_color = lv.palette_main(lv.PALETTE.BLUE) rect_dsc.border_width = 2 rect_dsc.border_opa = lv.OPA._90 rect_dsc.border_color = lv.color_white() rect_dsc.shadow_width = 5 rect_dsc.shadow_ofs_x = 5 rect_dsc.shadow_ofs_y = 5 label_dsc = lv.draw_label_dsc_t() label_dsc.init() label_dsc.color = lv.palette_main(lv.PALETTE.YELLOW) cbuf = bytearray(_CANVAS_WIDTH * _CANVAS_HEIGHT * 4) canvas = lv.canvas(lv.scr_act()) canvas.set_buffer(cbuf, _CANVAS_WIDTH, _CANVAS_HEIGHT, lv.img.CF.TRUE_COLOR)
#!/opt/bin/lv_micropython -i import lvgl as lv import display_driver display_driver.getdisplay_landscape() # # Using the border style properties # style = lv.style_t() style.init() # Set a background color and a radius style.set_radius(10) style.set_bg_opa(lv.OPA.COVER) style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1)) # Add border to the bottom+right style.set_border_color(lv.palette_main(lv.PALETTE.BLUE)) style.set_border_width(5) style.set_border_opa(lv.OPA._50) style.set_border_side(lv.BORDER_SIDE.BOTTOM | lv.BORDER_SIDE.RIGHT) # Create an object with the new style obj = lv.obj(lv.scr_act()) obj.add_style(style, 0) obj.center()