mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-29 06:36:05 +08:00
adding micropython examples (#2286)
* adding micropython examples * adding micropython examples
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
def anim_x_cb(label, v):
|
||||||
|
label.set_x(v)
|
||||||
|
|
||||||
|
def sw_event_cb(e,label):
|
||||||
|
sw = e.get_target()
|
||||||
|
|
||||||
|
if sw.has_state(lv.STATE.CHECKED):
|
||||||
|
a = lv.anim_t()
|
||||||
|
a.init()
|
||||||
|
a.set_var(label)
|
||||||
|
a.set_values(label.get_x(), 100)
|
||||||
|
a.set_time(500)
|
||||||
|
a.set_path_cb(lv.anim_t.path_overshoot)
|
||||||
|
a.set_custom_exec_cb(lambda a,val: anim_x_cb(label,val))
|
||||||
|
lv.anim_t.start(a)
|
||||||
|
else:
|
||||||
|
a = lv.anim_t()
|
||||||
|
a.init()
|
||||||
|
a.set_var(label)
|
||||||
|
a.set_values(label.get_x(), -label.get_width())
|
||||||
|
a.set_time(500)
|
||||||
|
a.set_path_cb(lv.anim_t.path_ease_in)
|
||||||
|
a.set_custom_exec_cb(lambda a,val: anim_x_cb(label,val))
|
||||||
|
lv.anim_t.start(a)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Start animation on an event
|
||||||
|
#
|
||||||
|
|
||||||
|
label = lv.label(lv.scr_act())
|
||||||
|
label.set_text("Hello animations!")
|
||||||
|
label.set_pos(100, 10)
|
||||||
|
|
||||||
|
|
||||||
|
sw = lv.switch(lv.scr_act())
|
||||||
|
sw.center()
|
||||||
|
sw.add_state(lv.STATE.CHECKED)
|
||||||
|
sw.add_event_cb(lambda e: sw_event_cb(e,label), lv.EVENT.VALUE_CHANGED, None)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
def anim_x_cb(obj, v):
|
||||||
|
obj.set_x(v)
|
||||||
|
|
||||||
|
def anim_size_cb(obj, v):
|
||||||
|
obj.set_size(v, v)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a playback animation
|
||||||
|
#
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
|
||||||
|
obj.set_style_radius(lv.RADIUS.CIRCLE, 0)
|
||||||
|
|
||||||
|
obj.align(lv.ALIGN.LEFT_MID, 10, 0)
|
||||||
|
|
||||||
|
a1 = lv.anim_t()
|
||||||
|
a1.init()
|
||||||
|
a1.set_var(obj)
|
||||||
|
a1.set_values(10, 50)
|
||||||
|
a1.set_time(1000)
|
||||||
|
a1.set_playback_delay(100)
|
||||||
|
a1.set_playback_time(300)
|
||||||
|
a1.set_repeat_delay(500)
|
||||||
|
a1.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
a1.set_path_cb(lv.anim_t.path_ease_in_out)
|
||||||
|
a1.set_custom_exec_cb(lambda a1,val: anim_size_cb(obj,val))
|
||||||
|
lv.anim_t.start(a1)
|
||||||
|
|
||||||
|
a2 = lv.anim_t()
|
||||||
|
a2.init()
|
||||||
|
a2.set_var(obj)
|
||||||
|
a2.set_values(10, 240)
|
||||||
|
a2.set_time(1000)
|
||||||
|
a2.set_playback_delay(100)
|
||||||
|
a2.set_playback_time(300)
|
||||||
|
a2.set_repeat_delay(500)
|
||||||
|
a2.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
a2.set_path_cb(lv.anim_t.path_ease_in_out)
|
||||||
|
a2.set_custom_exec_cb(lambda a1,val: anim_x_cb(obj,val))
|
||||||
|
lv.anim_t.start(a2)
|
||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
star.png
|
||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
skew_strip.png
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
class Event_1():
|
||||||
|
def __init__(self):
|
||||||
|
self.cnt = 1
|
||||||
|
#
|
||||||
|
# Add click event to a button
|
||||||
|
#
|
||||||
|
|
||||||
|
btn = lv.btn(lv.scr_act())
|
||||||
|
btn.set_size(100, 50)
|
||||||
|
btn.center()
|
||||||
|
btn.add_event_cb(self.event_cb, lv.EVENT.CLICKED, None)
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
label.set_text("Click me!");
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
def event_cb(self,e):
|
||||||
|
print("Clicked");
|
||||||
|
|
||||||
|
btn = lv.btn.__cast__(e.get_target())
|
||||||
|
label = btn.get_child(0)
|
||||||
|
label.set_text(str(self.cnt))
|
||||||
|
self.cnt += 1
|
||||||
|
|
||||||
|
evt1 = Event_1()
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
def event_cb(e,label):
|
||||||
|
code = e.get_code()
|
||||||
|
if code == lv.EVENT.PRESSED:
|
||||||
|
label.set_text("The last button event:\nLV_EVENT_PRESSED")
|
||||||
|
elif code == lv.EVENT.CLICKED:
|
||||||
|
label.set_text("The last button event:\nLV_EVENT_CLICKED")
|
||||||
|
elif code == lv.EVENT.LONG_PRESSED:
|
||||||
|
label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED")
|
||||||
|
elif code == lv.EVENT.LONG_PRESSED_REPEAT:
|
||||||
|
label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED_REPEAT")
|
||||||
|
btn = lv.btn(lv.scr_act())
|
||||||
|
btn.set_size(100, 50)
|
||||||
|
btn.center()
|
||||||
|
|
||||||
|
btn_label = lv.label(btn)
|
||||||
|
btn_label.set_text("Click me!")
|
||||||
|
btn_label.center()
|
||||||
|
|
||||||
|
info_label = lv.label(lv.scr_act())
|
||||||
|
info_label.set_text("The last button event:\nNone");
|
||||||
|
|
||||||
|
btn.add_event_cb(lambda e: event_cb(e,info_label), lv.EVENT.ALL, None)
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
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)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Demonstrate event bubbling
|
||||||
|
#
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(320, 200)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||||
|
|
||||||
|
for i in range(30):
|
||||||
|
btn = lv.btn(cont)
|
||||||
|
btn.set_size(80, 50)
|
||||||
|
btn.add_flag(lv.obj.FLAG.EVENT_BUBBLE)
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
label.set_text(str(i))
|
||||||
|
label.center()
|
||||||
|
cont.add_event_cb(event_cb, lv.EVENT.CLICKED, None)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
class CounterBtn():
|
||||||
|
def __init__(self):
|
||||||
|
self.cnt = 0
|
||||||
|
#
|
||||||
|
# Create a button with a label and react on click event.
|
||||||
|
#
|
||||||
|
|
||||||
|
btn = lv.btn(lv.scr_act()) # Add a button the current screen
|
||||||
|
btn.set_pos(10, 10) # Set its position
|
||||||
|
btn.set_size(120, 50) # Set its size
|
||||||
|
btn.align(lv.ALIGN.CENTER,0,0)
|
||||||
|
btn.add_event_cb(self.btn_event_cb, lv.EVENT.ALL, None) # Assign a callback to the button
|
||||||
|
label = lv.label(btn) # Add a label to the button
|
||||||
|
label.set_text("Button") # Set the labels text
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
def btn_event_cb(self,evt):
|
||||||
|
code = evt.get_code()
|
||||||
|
btn = evt.get_target()
|
||||||
|
if code == lv.EVENT.CLICKED:
|
||||||
|
self.cnt += 1
|
||||||
|
|
||||||
|
# Get the first child of the button which is the label and change its text
|
||||||
|
label = lv.label.__cast__(btn.get_child(0))
|
||||||
|
label.set_text("Button: " + str(self.cnt))
|
||||||
|
|
||||||
|
|
||||||
|
counterBtn = CounterBtn()
|
||||||
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#
|
||||||
|
# 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))
|
||||||
|
|
||||||
|
# Create a style for the pressed state.
|
||||||
|
style_btn_pressed.init()
|
||||||
|
style_btn_pressed.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style_btn_pressed.set_bg_grad_color(lv.palette_darken(lv.PALETTE.RED, 3))
|
||||||
|
|
||||||
|
# Create a button and use the new styles
|
||||||
|
btn = lv.btn(lv.scr_act()) # Add a button the current screen
|
||||||
|
# Remove the styles coming from the theme
|
||||||
|
# Note that size and position are also stored as style properties
|
||||||
|
# so lv_obj_remove_style_all will remove the set size and position too
|
||||||
|
btn.remove_style_all() # Remove the styles coming from the theme
|
||||||
|
btn.set_pos(10, 10) # Set its position
|
||||||
|
btn.set_size(120, 50) # Set its size
|
||||||
|
btn.add_style(style_btn, 0)
|
||||||
|
btn.add_style(style_btn_pressed, lv.STATE.PRESSED)
|
||||||
|
|
||||||
|
label = lv.label(btn) # Add a label to the button
|
||||||
|
label.set_text("Button") # Set the labels text
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
# Create an other button and use the red style too
|
||||||
|
btn2 = lv.btn(lv.scr_act())
|
||||||
|
btn2.remove_style_all() # Remove the styles coming from the theme
|
||||||
|
btn2.set_pos(10, 80) # Set its position
|
||||||
|
btn2.set_size(120, 50) # Set its size
|
||||||
|
btn2.add_style(style_btn, 0)
|
||||||
|
btn2.add_style(style_btn_red, 0)
|
||||||
|
btn2.add_style(style_btn_pressed, lv.STATE.PRESSED)
|
||||||
|
btn2.set_style_radius(lv.RADIUS.CIRCLE, 0); # Add a local style
|
||||||
|
|
||||||
|
label = lv.label(btn2) # Add a label to the button
|
||||||
|
label.set_text("Button 2"); # Set the labels text
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
def slider_event_cb(evt):
|
||||||
|
slider = evt.get_target()
|
||||||
|
|
||||||
|
# Refresh the text
|
||||||
|
label.set_text(str(slider.get_value()))
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a slider and write its value on a label.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Create a slider in the center of the display
|
||||||
|
slider = lv.slider(lv.scr_act())
|
||||||
|
slider.set_width(200) # Set the width
|
||||||
|
slider.center() # Align to the center of the parent (screen)
|
||||||
|
slider.add_event_cb(slider_event_cb, lv.EVENT.VALUE_CHANGED, None) # Assign an event function
|
||||||
|
|
||||||
|
# Create a label below the slider
|
||||||
|
label = lv.label(lv.scr_act());
|
||||||
|
label.set_text("0")
|
||||||
|
label.align_to(slider, lv.ALIGN.OUT_TOP_MID, 0, -15) # Align below the slider
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/opt/bin/lv_micropython -i
|
||||||
|
import lvgl as lv
|
||||||
|
import display_driver
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#
|
||||||
|
# A simple row and a column layout with flexbox
|
||||||
|
#
|
||||||
|
|
||||||
|
# Create a container with ROW flex direction
|
||||||
|
cont_row = lv.obj(lv.scr_act())
|
||||||
|
cont_row.set_size(300, 75)
|
||||||
|
cont_row.align(lv.ALIGN.TOP_MID, 0, 5)
|
||||||
|
cont_row.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||||
|
|
||||||
|
# Create a container with COLUMN flex direction
|
||||||
|
cont_col = lv.obj(lv.scr_act())
|
||||||
|
cont_col.set_size(200, 150)
|
||||||
|
cont_col.align_to(cont_row, lv.ALIGN.OUT_BOTTOM_MID, 0, 5)
|
||||||
|
cont_col.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
# Add items to the row
|
||||||
|
obj = lv.btn(cont_row)
|
||||||
|
obj.set_size(100, lv.pct(100))
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("Item: {:d}".format(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
# Add items to the column
|
||||||
|
obj = lv.btn(cont_col)
|
||||||
|
obj.set_size(lv.pct(100), lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("Item: {:d}".format(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# Arrange items in rows with wrap and place the items to get even space around them.
|
||||||
|
#
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
style.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||||
|
style.set_flex_main_place(lv.FLEX_ALIGN.SPACE_EVENLY)
|
||||||
|
style.set_layout(lv.LAYOUT_FLEX.value)
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.add_style(style, 0)
|
||||||
|
|
||||||
|
for i in range(8):
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(70, lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("{:d}".format(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# Demonstrate flex grow.
|
||||||
|
#
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(40, 40) # Fix size
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_height(40)
|
||||||
|
obj.set_flex_grow(1) # 1 portion from the free space
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_height(40)
|
||||||
|
obj.set_flex_grow(2) # 2 portion from the free space
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(40, 40) # Fix size. It is flushed to the right by the "grow" items
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Reverse the order of flex items
|
||||||
|
#
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.COLUMN_REVERSE)
|
||||||
|
|
||||||
|
for i in range(6):
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(100, 50)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("Item: " + str(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
def row_gap_anim(obj, v):
|
||||||
|
obj.set_style_pad_row(v, 0)
|
||||||
|
|
||||||
|
|
||||||
|
def column_gap_anim(obj, v):
|
||||||
|
obj.set_style_pad_column(v, 0)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Demonstrate the effect of column and row gap style properties
|
||||||
|
#
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(70, lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text(str(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
a_row = lv.anim_t()
|
||||||
|
a_row.init()
|
||||||
|
a_row.set_var(cont)
|
||||||
|
a_row.set_values(0, 10)
|
||||||
|
a_row.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
|
||||||
|
a_row.set_time(500)
|
||||||
|
a_row.set_playback_time(500)
|
||||||
|
a_row.set_custom_exec_cb(lambda a,val: row_gap_anim(cont,val))
|
||||||
|
lv.anim_t.start(a_row)
|
||||||
|
|
||||||
|
a_col = lv.anim_t()
|
||||||
|
a_col.init()
|
||||||
|
a_col.set_var(cont)
|
||||||
|
a_col.set_values(0, 10)
|
||||||
|
a_col.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
|
||||||
|
a_col.set_time(3000)
|
||||||
|
a_col.set_playback_time(3000)
|
||||||
|
a_col.set_custom_exec_cb(lambda a,val: column_gap_anim(cont,val))
|
||||||
|
|
||||||
|
lv.anim_t.start(a_col)
|
||||||
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
# RTL base direction changes order of the items.
|
||||||
|
# Also demonstrate how horizontal scrolling works with RTL.
|
||||||
|
#
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_style_base_dir(lv.BASE_DIR.RTL,0)
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||||
|
|
||||||
|
for i in range(20):
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(70, lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text(str(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#
|
||||||
|
# A simple grid
|
||||||
|
#
|
||||||
|
|
||||||
|
col_dsc = [70, 70, 70, lv.COORD.MAX]
|
||||||
|
row_dsc = [50, 50, 50, lv.COORD.MAX]
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_style_grid_column_dsc_array(col_dsc, 0)
|
||||||
|
cont.set_style_grid_row_dsc_array(row_dsc, 0)
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_layout(lv.LAYOUT_GRID.value)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
col = i % 3
|
||||||
|
row = i // 3
|
||||||
|
|
||||||
|
obj = lv.btn(cont)
|
||||||
|
# Stretch the cell horizontally and vertically too
|
||||||
|
# Set span to 1 to make the cell 1 column/row sized
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("c" +str(col) + "r" +str(row))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#
|
||||||
|
# Demonstrate cell placement and span
|
||||||
|
#
|
||||||
|
|
||||||
|
col_dsc = [70, 70, 70, lv.GRID_TEMPLATE.LAST]
|
||||||
|
row_dsc = [50, 50, 50, lv.GRID_TEMPLATE.LAST]
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
|
||||||
|
# Cell to 0;0 and align to to the start (left/top) horizontally and vertically too
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,
|
||||||
|
lv.GRID_ALIGN.START, 0, 1)
|
||||||
|
label = lv.label(obj);
|
||||||
|
label.set_text("c0, r0")
|
||||||
|
|
||||||
|
# Cell to 1;0 and align to to the start (left) horizontally and center vertically too
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.START, 1, 1,
|
||||||
|
lv.GRID_ALIGN.CENTER, 0, 1)
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("c1, r0")
|
||||||
|
|
||||||
|
# Cell to 2;0 and align to to the start (left) horizontally and end (bottom) vertically too
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.START, 2, 1,
|
||||||
|
lv.GRID_ALIGN.END, 0, 1)
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("c2, r0");
|
||||||
|
|
||||||
|
# Cell to 1;1 but 2 column wide (span = 2).Set width and height to stretched.
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 2,
|
||||||
|
lv.GRID_ALIGN.STRETCH, 1, 1)
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("c1-2, r1")
|
||||||
|
|
||||||
|
# Cell to 0;1 but 2 rows tall (span = 2).Set width and height to stretched.
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, 1, 2)
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("c0\nr1-2")
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
def LV_GRID_FR(x):
|
||||||
|
return lv.COORD.MAX - 100 + x
|
||||||
|
#
|
||||||
|
# Demonstrate grid's "free unit"
|
||||||
|
#
|
||||||
|
|
||||||
|
# Column 1: fix width 60 px
|
||||||
|
# Column 2: 1 unit from the remaining free space
|
||||||
|
# Column 3: 2 unit from the remaining free space
|
||||||
|
|
||||||
|
col_dsc = [60, LV_GRID_FR(1), LV_GRID_FR(2), lv.COORD.MAX]
|
||||||
|
|
||||||
|
# Row 1: fix width 60 px
|
||||||
|
# Row 2: 1 unit from the remaining free space
|
||||||
|
# Row 3: fix width 60 px
|
||||||
|
|
||||||
|
row_dsc = [40, LV_GRID_FR(1), 40, lv.COORD.MAX]
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
col = i % 3
|
||||||
|
row = i // 3
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
# Stretch the cell horizontally and vertically too
|
||||||
|
# Set span to 1 to make the cell 1 column/row sized
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("%d,%d"%(col, row))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#
|
||||||
|
# Demonstrate track placement
|
||||||
|
#
|
||||||
|
|
||||||
|
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE.LAST]
|
||||||
|
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE.LAST]
|
||||||
|
|
||||||
|
|
||||||
|
# Add space between the columns and move the rows to the bottom (end)
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.END)
|
||||||
|
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
col = i % 3
|
||||||
|
row = i // 3
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
# Stretch the cell horizontally and vertically too
|
||||||
|
# Set span to 1 to make the cell 1 column/row sized
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("{:d}{:d}".format(col, row))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
def row_gap_anim(obj, v):
|
||||||
|
obj.set_style_pad_row(v, 0)
|
||||||
|
|
||||||
|
def column_gap_anim(obj, v):
|
||||||
|
obj.set_style_pad_column(v, 0)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Demonstrate column and row gap
|
||||||
|
#
|
||||||
|
|
||||||
|
# 60x60 cells
|
||||||
|
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE.LAST]
|
||||||
|
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE.LAST]
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
col = i % 3
|
||||||
|
row = i // 3
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("{:d},{:d}".format(col, row))
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
a_row = lv.anim_t()
|
||||||
|
a_row.init()
|
||||||
|
a_row.set_var(cont)
|
||||||
|
a_row.set_values(0, 10)
|
||||||
|
a_row.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
a_row.set_time(500)
|
||||||
|
a_row.set_playback_time(500)
|
||||||
|
a_row. set_custom_exec_cb(lambda a,val: row_gap_anim(cont,val))
|
||||||
|
lv.anim_t.start(a_row)
|
||||||
|
|
||||||
|
a_col = lv.anim_t()
|
||||||
|
a_col.init()
|
||||||
|
a_col.set_var(cont)
|
||||||
|
a_col.set_values(0, 10)
|
||||||
|
a_col.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
a_col.set_time(500)
|
||||||
|
a_col.set_playback_time(500)
|
||||||
|
a_col. set_custom_exec_cb(lambda a,val: column_gap_anim(cont,val))
|
||||||
|
lv.anim_t.start(a_col)
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#
|
||||||
|
# Demonstrate RTL direction on grid
|
||||||
|
#
|
||||||
|
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE.LAST]
|
||||||
|
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE.LAST]
|
||||||
|
|
||||||
|
# Create a container with grid
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(300, 220)
|
||||||
|
cont.center()
|
||||||
|
cont.set_style_base_dir(lv.BASE_DIR.RTL,0)
|
||||||
|
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||||
|
|
||||||
|
for i in range(9):
|
||||||
|
col = i % 3
|
||||||
|
row = i // 3
|
||||||
|
|
||||||
|
obj = lv.obj(cont)
|
||||||
|
# Stretch the cell horizontally and vertically too
|
||||||
|
# Set span to 1 to make the cell 1 column/row sized
|
||||||
|
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||||
|
lv.GRID_ALIGN.STRETCH, row, 1);
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("{:d},{:d}".format(col, row))
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# Demonstrate how scrolling appears automatically
|
||||||
|
#
|
||||||
|
# Create an object with the new style
|
||||||
|
panel = lv.obj(lv.scr_act())
|
||||||
|
panel.set_size(200, 200)
|
||||||
|
panel.center()
|
||||||
|
|
||||||
|
child = lv.obj(panel)
|
||||||
|
child.set_pos(0, 0)
|
||||||
|
label = lv.label(child)
|
||||||
|
label.set_text("Zero")
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
child = lv.obj(panel)
|
||||||
|
child.set_pos(-40, 100)
|
||||||
|
label = lv.label(child)
|
||||||
|
label.set_text("Left")
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
child = lv.obj(panel)
|
||||||
|
child.set_pos(90, -30)
|
||||||
|
label = lv.label(child)
|
||||||
|
label.set_text("Top")
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
child = lv.obj(panel)
|
||||||
|
child.set_pos(150, 80)
|
||||||
|
label = lv.label(child)
|
||||||
|
label.set_text("Right")
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
child = lv.obj(panel)
|
||||||
|
child.set_pos(60, 170)
|
||||||
|
label = lv.label(child)
|
||||||
|
label.set_text("Bottom")
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
def sw_event_cb(e,panel):
|
||||||
|
|
||||||
|
code = e.get_code()
|
||||||
|
sw = e.get_target()
|
||||||
|
|
||||||
|
if code == lv.EVENT.VALUE_CHANGED:
|
||||||
|
|
||||||
|
if sw.has_state(lv.STATE.CHECKED):
|
||||||
|
panel.add_flag(lv.obj.FLAG.SCROLL_ONE)
|
||||||
|
else:
|
||||||
|
panel.clear_flag(lv.obj.FLAG.SCROLL_ONE)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Show an example to scroll snap
|
||||||
|
#
|
||||||
|
|
||||||
|
panel = lv.obj(lv.scr_act())
|
||||||
|
panel.set_size(280, 150)
|
||||||
|
panel.set_scroll_snap_x(lv.SCROLL_SNAP.CENTER)
|
||||||
|
panel.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||||
|
panel.center()
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
btn = lv.btn(panel)
|
||||||
|
btn.set_size(150, 100)
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
if i == 3:
|
||||||
|
label.set_text("Panel {:d}\nno snap".format(i))
|
||||||
|
btn.clear_flag(lv.obj.FLAG.SNAPABLE)
|
||||||
|
else:
|
||||||
|
label.set_text("Panel {:d}".format(i))
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
panel.update_snap(lv.ANIM.ON)
|
||||||
|
|
||||||
|
|
||||||
|
# Switch between "One scroll" and "Normal scroll" mode
|
||||||
|
sw = lv.switch(lv.scr_act());
|
||||||
|
sw.align(lv.ALIGN.TOP_RIGHT, -20, 10)
|
||||||
|
sw.add_event_cb(lambda evt: sw_event_cb(evt,panel), lv.EVENT.ALL, None)
|
||||||
|
label = lv.label(lv.scr_act())
|
||||||
|
label.set_text("One scroll")
|
||||||
|
label.align_to(sw, lv.ALIGN.OUT_BOTTOM_MID, 0, 5)
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
class ScrollExample_3():
|
||||||
|
def __init__(self):
|
||||||
|
self.btn_cnt = 1
|
||||||
|
#
|
||||||
|
# Create a list a with a floating button
|
||||||
|
#
|
||||||
|
|
||||||
|
list = lv.list(lv.scr_act())
|
||||||
|
list.set_size(280, 220)
|
||||||
|
list.center()
|
||||||
|
|
||||||
|
for btn_cnt in range(2):
|
||||||
|
list.add_btn(lv.SYMBOL.AUDIO,"Track {:d}".format(btn_cnt))
|
||||||
|
|
||||||
|
float_btn = lv.btn(list)
|
||||||
|
float_btn.set_size(50, 50)
|
||||||
|
float_btn.add_flag(lv.obj.FLAG.FLOATING)
|
||||||
|
float_btn.align(lv.ALIGN.BOTTOM_RIGHT, 0, -list.get_style_pad_right(lv.PART.MAIN))
|
||||||
|
float_btn.add_event_cb(lambda evt: self.float_btn_event_cb(evt,list), lv.EVENT.ALL, None)
|
||||||
|
float_btn.set_style_radius(lv.RADIUS.CIRCLE, 0)
|
||||||
|
float_btn.set_style_bg_img_src(lv.SYMBOL.PLUS, 0)
|
||||||
|
float_btn.set_style_text_font(lv.theme_get_font_large(float_btn), 0)
|
||||||
|
|
||||||
|
def float_btn_event_cb(self,e,list):
|
||||||
|
code = e.get_code()
|
||||||
|
float_btn = e.get_target()
|
||||||
|
|
||||||
|
if code == lv.EVENT.CLICKED:
|
||||||
|
list_btn = list.add_btn(lv.SYMBOL.AUDIO, "Track {:d}".format(self.btn_cnt))
|
||||||
|
self.btn_cnt += 1
|
||||||
|
|
||||||
|
float_btn.move_foreground()
|
||||||
|
|
||||||
|
list_btn.scroll_to_view(lv.ANIM.ON)
|
||||||
|
|
||||||
|
scroll_example_3 = ScrollExample_3()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#
|
||||||
|
# Styling the scrollbars
|
||||||
|
#
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.set_size(200, 100)
|
||||||
|
obj.center()
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text(
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
Etiam dictum, tortor vestibulum lacinia laoreet, mi neque consectetur neque, vel mattis odio dolor egestas ligula.
|
||||||
|
Sed vestibulum sapien nulla, id convallis ex porttitor nec.
|
||||||
|
Duis et massa eu libero accumsan faucibus a in arcu.
|
||||||
|
Ut pulvinar odio lorem, vel tempus turpis condimentum quis. Nam consectetur condimentum sem in auctor.
|
||||||
|
Sed nisl augue, venenatis in blandit et, gravida ac tortor.
|
||||||
|
Etiam dapibus elementum suscipit.
|
||||||
|
Proin mollis sollicitudin convallis.
|
||||||
|
Integer dapibus tempus arcu nec viverra.
|
||||||
|
Donec molestie nulla enim, eu interdum velit placerat quis.
|
||||||
|
Donec id efficitur risus, at molestie turpis.
|
||||||
|
Suspendisse vestibulum consectetur nunc ut commodo.
|
||||||
|
Fusce molestie rhoncus nisi sit amet tincidunt.
|
||||||
|
Suspendisse a nunc ut magna ornare volutpat.
|
||||||
|
""")
|
||||||
|
|
||||||
|
|
||||||
|
# Remove the style of scrollbar to have clean start
|
||||||
|
obj.remove_style(None, lv.PART.SCROLLBAR | lv.STATE.ANY)
|
||||||
|
|
||||||
|
# Create a transition the animate the some properties on state change
|
||||||
|
props = [lv.STYLE.BG_OPA, lv.STYLE.WIDTH, 0]
|
||||||
|
trans = lv.style_transition_dsc_t()
|
||||||
|
trans.init(props, lv.anim_t.path_linear, 200, 0, None)
|
||||||
|
|
||||||
|
# Create a style for the scrollbars
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
style.set_width(4) # Width of the scrollbar
|
||||||
|
style.set_pad_right(5) # Space from the parallel side
|
||||||
|
style.set_pad_top(5) # Space from the perpendicular side
|
||||||
|
|
||||||
|
style.set_radius(2)
|
||||||
|
style.set_bg_opa(lv.OPA._70)
|
||||||
|
style.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style.set_border_color(lv.palette_darken(lv.PALETTE.BLUE, 3))
|
||||||
|
style.set_border_width(2)
|
||||||
|
style.set_shadow_width(8)
|
||||||
|
style.set_shadow_spread(2)
|
||||||
|
style.set_shadow_color(lv.palette_darken(lv.PALETTE.BLUE, 1))
|
||||||
|
|
||||||
|
style.set_transition(trans)
|
||||||
|
|
||||||
|
# Make the scrollbars wider and use 100% opacity when scrolled
|
||||||
|
style_scrolled = lv.style_t()
|
||||||
|
style_scrolled.init()
|
||||||
|
style_scrolled.set_width(8)
|
||||||
|
style_scrolled.set_bg_opa(lv.OPA.COVER)
|
||||||
|
|
||||||
|
obj.add_style(style, lv.PART.SCROLLBAR)
|
||||||
|
obj.add_style(style_scrolled, lv.PART.SCROLLBAR | lv.STATE.SCROLLED)
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#
|
||||||
|
# Scrolling with Right To Left base direction
|
||||||
|
#
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.set_style_base_dir(lv.BASE_DIR.RTL, 0)
|
||||||
|
obj.set_size(200, 100)
|
||||||
|
obj.center()
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("میکروکُنترولر (به انگلیسی: Microcontroller) گونهای ریزپردازنده است که دارای حافظهٔ دسترسی تصادفی (RAM) و حافظهٔ فقطخواندنی (ROM)، تایمر، پورتهای ورودی و خروجی (I/O) و درگاه ترتیبی (Serial Port پورت سریال)، درون خود تراشه است، و میتواند به تنهایی ابزارهای دیگر را کنترل کند. به عبارت دیگر یک میکروکنترلر، مدار مجتمع کوچکی است که از یک CPU کوچک و اجزای دیگری مانند تایمر، درگاههای ورودی و خروجی آنالوگ و دیجیتال و حافظه تشکیل شدهاست.")
|
||||||
|
label.set_width(400)
|
||||||
|
label.set_style_text_font(lv.font_dejavu_16_persian_hebrew, 0)
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
def scroll_event_cb(e):
|
||||||
|
|
||||||
|
cont = e.get_target()
|
||||||
|
|
||||||
|
cont_a = lv.area_t()
|
||||||
|
cont.get_coords(cont_a)
|
||||||
|
cont_y_center = cont_a.y1 + cont_a.get_height() // 2
|
||||||
|
|
||||||
|
r = cont.get_height() * 7 // 10
|
||||||
|
|
||||||
|
child_cnt = cont.get_child_cnt()
|
||||||
|
for i in range(child_cnt):
|
||||||
|
child = cont.get_child(i)
|
||||||
|
child_a = lv.area_t()
|
||||||
|
child.get_coords(child_a)
|
||||||
|
|
||||||
|
child_y_center = child_a.y1 + child_a.get_height() // 2
|
||||||
|
|
||||||
|
diff_y = child_y_center - cont_y_center;
|
||||||
|
diff_y = abs(diff_y)
|
||||||
|
|
||||||
|
# Get the x of diff_y on a circle.
|
||||||
|
|
||||||
|
# If diff_y is out of the circle use the last point of the circle (the radius)
|
||||||
|
if diff_y >= r:
|
||||||
|
x = r
|
||||||
|
else:
|
||||||
|
# Use Pythagoras theorem to get x from radius and y
|
||||||
|
x_sqr = r * r - diff_y * diff_y;
|
||||||
|
res = lv.sqrt_res_t()
|
||||||
|
lv.sqrt(x_sqr, res, 0x8000) # Use lvgl's built in sqrt root function
|
||||||
|
x = r - res.i
|
||||||
|
|
||||||
|
# Translate the item by the calculated X coordinate
|
||||||
|
child.set_style_translate_x(x, 0)
|
||||||
|
|
||||||
|
# Use some opacity with larger translations
|
||||||
|
opa = lv.map(x, 0, r, lv.OPA.TRANSP, lv.OPA.COVER)
|
||||||
|
child.set_style_opa(lv.OPA.COVER - opa, 0)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Translate the object as they scroll
|
||||||
|
#
|
||||||
|
|
||||||
|
cont = lv.obj(lv.scr_act())
|
||||||
|
cont.set_size(200, 200)
|
||||||
|
cont.center()
|
||||||
|
cont.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||||
|
cont.add_event_cb(scroll_event_cb, lv.EVENT.SCROLL, None)
|
||||||
|
cont.set_style_radius(lv.RADIUS.CIRCLE, 0)
|
||||||
|
cont.set_style_clip_corner(True, 0)
|
||||||
|
cont.set_scroll_dir(lv.DIR.VER)
|
||||||
|
cont.set_scroll_snap_y(lv.SCROLL_SNAP.CENTER)
|
||||||
|
cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
|
||||||
|
|
||||||
|
for i in range(20):
|
||||||
|
btn = lv.btn(cont)
|
||||||
|
btn.set_width(lv.pct(100))
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
label.set_text("Button " + str(i))
|
||||||
|
|
||||||
|
# Update the buttons position manually for first*
|
||||||
|
lv.event_send(cont, lv.EVENT.SCROLL, None)
|
||||||
|
|
||||||
|
# Be sure the fist button is in the middle
|
||||||
|
#lv.obj.scroll_to_view(cont.get_child(0), lv.ANIM.OFF)
|
||||||
|
cont.get_child(0).scroll_to_view(lv.ANIM.OFF)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#
|
||||||
|
# Using the Size, Position and Padding style properties
|
||||||
|
#
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
style.set_radius(5)
|
||||||
|
|
||||||
|
# Make a gradient
|
||||||
|
style.set_width(150)
|
||||||
|
style.set_height(lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
style.set_pad_ver(20)
|
||||||
|
style.set_pad_left(5)
|
||||||
|
|
||||||
|
style.set_x(lv.pct(50))
|
||||||
|
style.set_y(80)
|
||||||
|
|
||||||
|
# Create an object with the new style
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
|
||||||
|
label = lv.label(obj)
|
||||||
|
label.set_text("Hello");
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#
|
||||||
|
# Creating a transition
|
||||||
|
#
|
||||||
|
|
||||||
|
props = [lv.STYLE.BG_COLOR, lv.STYLE.BORDER_COLOR, lv.STYLE.BORDER_WIDTH, 0]
|
||||||
|
|
||||||
|
# A default transition
|
||||||
|
# Make it fast (100ms) and start with some delay (200 ms)
|
||||||
|
|
||||||
|
trans_def = lv.style_transition_dsc_t()
|
||||||
|
trans_def.init(props, lv.anim_t.path_linear, 100, 200, None)
|
||||||
|
|
||||||
|
# A special transition when going to pressed state
|
||||||
|
# Make it slow (500 ms) but start without delay
|
||||||
|
|
||||||
|
trans_pr = lv.style_transition_dsc_t()
|
||||||
|
trans_pr.init(props, lv.anim_t.path_linear, 500, 0, None)
|
||||||
|
|
||||||
|
style_def = lv.style_t()
|
||||||
|
style_def.init()
|
||||||
|
style_def.set_transition(trans_def)
|
||||||
|
|
||||||
|
style_pr = lv.style_t()
|
||||||
|
style_pr.init()
|
||||||
|
style_pr.set_bg_color(lv.palette_main(lv.PALETTE.RED))
|
||||||
|
style_pr.set_border_width(6)
|
||||||
|
style_pr.set_border_color(lv.palette_darken(lv.PALETTE.RED, 3))
|
||||||
|
style_pr.set_transition(trans_pr)
|
||||||
|
|
||||||
|
# Create an object with the new style_pr
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.add_style(style_def, 0)
|
||||||
|
obj.add_style(style_pr, lv.STATE.PRESSED)
|
||||||
|
|
||||||
|
obj.center()
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#
|
||||||
|
# Using multiple styles
|
||||||
|
#
|
||||||
|
# A base style
|
||||||
|
|
||||||
|
style_base = lv.style_t()
|
||||||
|
style_base.init()
|
||||||
|
style_base.set_bg_color(lv.palette_main(lv.PALETTE.LIGHT_BLUE))
|
||||||
|
style_base.set_border_color(lv.palette_darken(lv.PALETTE.LIGHT_BLUE, 3))
|
||||||
|
style_base.set_border_width(2)
|
||||||
|
style_base.set_radius(10)
|
||||||
|
style_base.set_shadow_width(10)
|
||||||
|
style_base.set_shadow_ofs_y(5)
|
||||||
|
style_base.set_shadow_opa(lv.OPA._50)
|
||||||
|
style_base.set_text_color(lv.color_white())
|
||||||
|
style_base.set_width(100)
|
||||||
|
style_base.set_height(lv.SIZE.CONTENT)
|
||||||
|
|
||||||
|
# Set only the properties that should be different
|
||||||
|
style_warning = lv.style_t()
|
||||||
|
style_warning.init()
|
||||||
|
style_warning.set_bg_color(lv.palette_main(lv.PALETTE.YELLOW))
|
||||||
|
style_warning.set_border_color(lv.palette_darken(lv.PALETTE.YELLOW, 3))
|
||||||
|
style_warning.set_text_color(lv.palette_darken(lv.PALETTE.YELLOW, 4))
|
||||||
|
|
||||||
|
# Create an object with the base style only
|
||||||
|
obj_base = lv.obj(lv.scr_act())
|
||||||
|
obj_base.add_style(style_base, 0)
|
||||||
|
obj_base.align(lv.ALIGN.LEFT_MID, 20, 0)
|
||||||
|
|
||||||
|
label = lv.label(obj_base)
|
||||||
|
label.set_text("Base")
|
||||||
|
label.center()
|
||||||
|
|
||||||
|
# Create an other object with the base style and earnings style too
|
||||||
|
obj_warning = lv.obj(lv.scr_act())
|
||||||
|
obj_warning.add_style(style_base, 0)
|
||||||
|
obj_warning.add_style(style_warning, 0)
|
||||||
|
obj_warning.align(lv.ALIGN.RIGHT_MID, -20, 0)
|
||||||
|
|
||||||
|
label = lv.label(obj_warning)
|
||||||
|
label.set_text("Warning")
|
||||||
|
label.center()
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#
|
||||||
|
# Local styles
|
||||||
|
#
|
||||||
|
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
style.set_bg_color(lv.palette_main(lv.PALETTE.GREEN))
|
||||||
|
style.set_border_color(lv.palette_lighten(lv.PALETTE.GREEN, 3))
|
||||||
|
style.set_border_width(3)
|
||||||
|
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
|
||||||
|
# Overwrite the background color locally
|
||||||
|
obj.set_style_bg_color(lv.palette_main(lv.PALETTE.ORANGE), lv.PART.MAIN)
|
||||||
|
|
||||||
|
obj.center()
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# Add styles to parts and states
|
||||||
|
#
|
||||||
|
|
||||||
|
style_indic = lv.style_t()
|
||||||
|
style_indic.init()
|
||||||
|
style_indic.set_bg_color(lv.palette_lighten(lv.PALETTE.RED, 3))
|
||||||
|
style_indic.set_bg_grad_color(lv.palette_main(lv.PALETTE.RED))
|
||||||
|
style_indic.set_bg_grad_dir(lv.GRAD_DIR.HOR)
|
||||||
|
|
||||||
|
style_indic_pr = lv.style_t()
|
||||||
|
style_indic_pr.init()
|
||||||
|
style_indic_pr.set_shadow_color(lv.palette_main(lv.PALETTE.RED))
|
||||||
|
style_indic_pr.set_shadow_width(10)
|
||||||
|
style_indic_pr.set_shadow_spread(3)
|
||||||
|
|
||||||
|
# Create an object with the new style_pr
|
||||||
|
obj = lv.slider(lv.scr_act())
|
||||||
|
obj.add_style(style_indic, lv.PART.INDICATOR)
|
||||||
|
obj.add_style(style_indic_pr, lv.PART.INDICATOR | lv.STATE.PRESSED)
|
||||||
|
obj.set_value(70, lv.ANIM.OFF)
|
||||||
|
obj.center()
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# Will be called when the styles of the base theme are already added
|
||||||
|
# to add new styles
|
||||||
|
|
||||||
|
|
||||||
|
class NewTheme(lv.theme_t):
|
||||||
|
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)
|
||||||
|
|
||||||
|
class ExampleStyle_14():
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
#
|
||||||
|
# Extending the current theme
|
||||||
|
#
|
||||||
|
|
||||||
|
btn = lv.btn(lv.scr_act())
|
||||||
|
btn.align(lv.ALIGN.TOP_MID, 0, 20)
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
label.set_text("Original theme")
|
||||||
|
|
||||||
|
self.new_theme_init_and_set()
|
||||||
|
|
||||||
|
btn = lv.btn(lv.scr_act())
|
||||||
|
btn.align(lv.ALIGN.BOTTOM_MID, 0, -20)
|
||||||
|
|
||||||
|
label = lv.label(btn)
|
||||||
|
label.set_text("New theme")
|
||||||
|
|
||||||
|
def new_theme_apply_cb(self,th, obj):
|
||||||
|
print(th,obj)
|
||||||
|
if obj.get_class() == lv.btn_class:
|
||||||
|
obj.add_style(self.th_new.style_btn, 0)
|
||||||
|
|
||||||
|
def new_theme_init_and_set(self):
|
||||||
|
print("new_theme_init_and_set")
|
||||||
|
# Initialize the new theme from the current theme
|
||||||
|
self.th_new = NewTheme()
|
||||||
|
self.th_new.set_apply_cb(self.new_theme_apply_cb)
|
||||||
|
lv.disp_get_default().set_theme(self.th_new)
|
||||||
|
|
||||||
|
exampleStyle_14 = ExampleStyle_14()
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# 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()
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# 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()
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# Using the outline 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 outline
|
||||||
|
style.set_outline_width(2)
|
||||||
|
style.set_outline_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style.set_outline_pad(8)
|
||||||
|
|
||||||
|
# Create an object with the new style
|
||||||
|
obj = lv.obj(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
obj.center()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# 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()
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
from imagetools import get_png_info, open_png
|
||||||
|
# Register PNG image decoder
|
||||||
|
decoder = lv.img.decoder_create()
|
||||||
|
decoder.info_cb = get_png_info
|
||||||
|
decoder.open_cb = open_png
|
||||||
|
|
||||||
|
# Create an image from the png file
|
||||||
|
try:
|
||||||
|
with open('../assets/img_cogwheel_argb.png','rb') as f:
|
||||||
|
png_data = f.read()
|
||||||
|
except:
|
||||||
|
print("Could not find img_cogwheel_argb.png")
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
img_cogwheel_argb = lv.img_dsc_t({
|
||||||
|
'data_size': len(png_data),
|
||||||
|
'data': png_data
|
||||||
|
})
|
||||||
|
|
||||||
|
#
|
||||||
|
# Using the Image 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, 3))
|
||||||
|
style.set_border_width(2)
|
||||||
|
style.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
|
||||||
|
style.set_img_recolor(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style.set_img_recolor_opa(lv.OPA._50)
|
||||||
|
# style.set_transform_angle(300)
|
||||||
|
|
||||||
|
# Create an object with the new style
|
||||||
|
obj = lv.img(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
|
||||||
|
obj.set_src(img_cogwheel_argb)
|
||||||
|
|
||||||
|
obj.center()
|
||||||
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#
|
||||||
|
# Using the Arc style properties
|
||||||
|
#
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
|
||||||
|
style.set_arc_color(lv.palette_main(lv.PALETTE.RED))
|
||||||
|
style.set_arc_width(4)
|
||||||
|
|
||||||
|
# Create an object with the new style
|
||||||
|
obj = lv.arc(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
obj.center()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#
|
||||||
|
# Using the text style properties
|
||||||
|
#
|
||||||
|
|
||||||
|
style = lv.style_t()
|
||||||
|
style.init()
|
||||||
|
|
||||||
|
style.set_radius(5)
|
||||||
|
style.set_bg_opa(lv.OPA.COVER)
|
||||||
|
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3))
|
||||||
|
style.set_border_width(2)
|
||||||
|
style.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style.set_pad_all(10)
|
||||||
|
|
||||||
|
style.set_text_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||||
|
style.set_text_letter_space(5)
|
||||||
|
style.set_text_line_space(20)
|
||||||
|
style.set_text_decor(lv.TEXT_DECOR.UNDERLINE)
|
||||||
|
|
||||||
|
# Create an object with the new style
|
||||||
|
obj = lv.label(lv.scr_act())
|
||||||
|
obj.add_style(style, 0)
|
||||||
|
obj.set_text("Text of\n"
|
||||||
|
"a label");
|
||||||
|
|
||||||
|
obj.center()
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# 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()
|
||||||
|
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cat ../../header.py $1 > test.py
|
||||||
|
chmod +x test.py
|
||||||
|
./test.py
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
from imagetools import get_png_info, open_png
|
||||||
|
|
||||||
|
# Register PNG image decoder
|
||||||
|
decoder = lv.img.decoder_create()
|
||||||
|
decoder.info_cb = get_png_info
|
||||||
|
decoder.open_cb = open_png
|
||||||
|
|
||||||
|
anim_imgs = [None]*3
|
||||||
|
# Create an image from the png file
|
||||||
|
try:
|
||||||
|
with open('../../assets/animimg001.png','rb') as f:
|
||||||
|
anim001_data = f.read()
|
||||||
|
except:
|
||||||
|
print("Could not find animimg001.png")
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
anim_imgs[0] = lv.img_dsc_t({
|
||||||
|
'data_size': len(anim001_data),
|
||||||
|
'data': anim001_data
|
||||||
|
})
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open('../../assets/animimg002.png','rb') as f:
|
||||||
|
anim002_data = f.read()
|
||||||
|
except:
|
||||||
|
print("Could not find animimg002.png")
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
anim_imgs[1] = lv.img_dsc_t({
|
||||||
|
'data_size': len(anim002_data),
|
||||||
|
'data': anim002_data
|
||||||
|
})
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open('../../assets/animimg003.png','rb') as f:
|
||||||
|
anim003_data = f.read()
|
||||||
|
except:
|
||||||
|
print("Could not find animimg003.png")
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
anim_imgs[2] = lv.img_dsc_t({
|
||||||
|
'data_size': len(anim003_data),
|
||||||
|
'data': anim003_data
|
||||||
|
})
|
||||||
|
|
||||||
|
animimg0 = lv.animimg(lv.scr_act())
|
||||||
|
animimg0.center()
|
||||||
|
animimg0.set_src(anim_imgs, 3)
|
||||||
|
animimg0.set_duration(1000)
|
||||||
|
animimg0.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
animimg0.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +1,8 @@
|
|||||||
# Create style for the Arcs
|
|
||||||
style = lv.style_t()
|
|
||||||
lv.style_copy(style, lv.style_plain)
|
|
||||||
style.line.color = lv.color_make(0,0,255) # Arc color
|
|
||||||
style.line.width = 8 # Arc width
|
|
||||||
|
|
||||||
# Create an Arc
|
# Create an Arc
|
||||||
arc = lv.arc(lv.scr_act())
|
arc = lv.arc(lv.scr_act())
|
||||||
arc.set_style(lv.arc.STYLE.MAIN, style) # Use the new style
|
arc.set_end_angle(200)
|
||||||
arc.set_angles(90, 60)
|
|
||||||
arc.set_size(150, 150)
|
arc.set_size(150, 150)
|
||||||
arc.align(None, lv.ALIGN.CENTER, 0, 0)
|
arc.center()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,43 +1,37 @@
|
|||||||
# Create an arc which acts as a loader.
|
#
|
||||||
class loader_arc(lv.arc):
|
# An `lv_timer` to call periodically to set the angles of the arc
|
||||||
|
#
|
||||||
def __init__(self, parent, color=lv.color_hex(0x000080),
|
class ArcLoader():
|
||||||
width=8, style=lv.style_plain, rate=20):
|
def __init__(self):
|
||||||
super().__init__(parent)
|
self.a = 270
|
||||||
|
|
||||||
self.a = 0
|
def arc_loader_cb(self,tim,arc):
|
||||||
self.rate = rate
|
# print(tim,arc)
|
||||||
|
self.a += 5
|
||||||
|
|
||||||
# Create style for the Arcs
|
arc.set_end_angle(self.a)
|
||||||
self.style = lv.style_t()
|
|
||||||
lv.style_copy(self.style, style)
|
|
||||||
self.style.line.color = color
|
|
||||||
self.style.line.width = width
|
|
||||||
|
|
||||||
# Create an Arc
|
if self.a >= 270 + 360:
|
||||||
self.set_angles(180, 180);
|
tim._del()
|
||||||
self.set_style(self.STYLE.MAIN, self.style);
|
|
||||||
|
|
||||||
# Spin the Arc
|
|
||||||
self.spin()
|
|
||||||
|
|
||||||
def spin(self):
|
#
|
||||||
# Create an `lv_task` to update the arc.
|
# Create an arc which acts as a loader.
|
||||||
lv.task_create(self.task_cb, self.rate, lv.TASK_PRIO.LOWEST, {})
|
#
|
||||||
|
|
||||||
|
# Create an Arc
|
||||||
# An `lv_task` to call periodically to set the angles of the arc
|
arc = lv.arc(lv.scr_act())
|
||||||
def task_cb(self, task):
|
arc.set_bg_angles(0, 360)
|
||||||
self.a+=5;
|
arc.set_angles(270, 270)
|
||||||
if self.a >= 359: self.a = 359
|
arc.center()
|
||||||
|
|
||||||
if self.a < 180: self.set_angles(180-self.a, 180)
|
# create the loader
|
||||||
else: self.set_angles(540-self.a, 180)
|
arc_loader = ArcLoader()
|
||||||
|
|
||||||
if self.a == 359:
|
# Create an `lv_timer` to update the arc.
|
||||||
self.a = 0
|
|
||||||
lv.task_del(task)
|
timer = lv.timer_create_basic()
|
||||||
|
timer.set_period(20)
|
||||||
|
timer.set_cb(lambda src: arc_loader.arc_loader_cb(timer,arc))
|
||||||
|
|
||||||
|
|
||||||
# Create a loader arc
|
|
||||||
loader_arc = loader_arc(lv.scr_act())
|
|
||||||
loader_arc.align(None, lv.ALIGN.CENTER, 0, 0)
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
bar1 = lv.bar(lv.scr_act())
|
bar1 = lv.bar(lv.scr_act())
|
||||||
bar1.set_size(200, 30)
|
bar1.set_size(200, 20)
|
||||||
bar1.align(None, lv.ALIGN.CENTER, 0, 0)
|
bar1.center()
|
||||||
bar1.set_anim_time(1000)
|
bar1.set_value(70, lv.ANIM.OFF)
|
||||||
bar1.set_value(100, lv.ANIM.ON)
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#
|
||||||
|
# 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)
|
||||||
|
bar.center()
|
||||||
|
bar.set_value(100, lv.ANIM.ON)
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
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)
|
||||||
|
a.set_repeat_count(lv.ANIM_REPEAT.INFINITE)
|
||||||
|
a.set_custom_exec_cb(lambda a, val: set_temp(bar,val))
|
||||||
|
lv.anim_t.start(a)
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user