-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathwidgets_test.py
148 lines (116 loc) · 4.6 KB
/
widgets_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import board_config
import pdwidgets as pd
try:
from gc import collect, mem_free
except ImportError:
mem_free = None
pd.DEBUG = False
pd.MARK_UPDATES = False
pd.init_timer(10) # Remove this line to use polled mode in a while loop
REVERSE = False # for troubleshooting progressbar, sliders, scrollbars
display = pd.Display(board_config.display_drv, board_config.broker)
screen = pd.Screen(display, visible=False)
status = pd.TextBox(screen, w=screen.width, align=pd.ALIGN.BOTTOM, scale=1)
toggle = pd.Toggle(screen, on_file=pd.icon_theme.home(pd.ICON_SIZE.LARGE)) # noqa: F841
label1 = pd.Label(
screen, align=pd.ALIGN.TOP, value="Inverted", bg=screen.bg, scale=2, inverted=True
) # noqa: F841
toggle_button = pd.ToggleButton(screen, align_to=toggle, align=pd.ALIGN.OUTER_RIGHT, value=False)
def flip_label(sender, event):
label1._inverted = not label1._inverted
label1.changed()
toggle_button.add_event_cb(pd.events.MOUSEBUTTONDOWN, flip_label)
checkbox = pd.CheckBox(screen, align=pd.ALIGN.OUTER_BOTTOM, align_to=toggle, value=False)
checkbox.add_event_cb(
pd.events.MOUSEBUTTONDOWN,
lambda sender, e: status.set_value(f"{'checked' if sender.value else 'unchecked'}"),
)
cb_label = pd.Label(checkbox, value="Check Me", align=pd.ALIGN.OUTER_RIGHT)
button1 = pd.Button(screen, w=96, align=pd.ALIGN.CENTER, value="button1", label="Mem_free")
if mem_free:
mem_free_label = pd.Label(
screen, y=6, align_to=button1, align=pd.ALIGN.OUTER_BOTTOM, value=f"Free mem: {mem_free()}"
)
def mem_free_action(sender, event):
collect()
mem_free_label.set_value(f"Free mem: {mem_free()}")
button1.add_event_cb(pd.events.MOUSEBUTTONDOWN, mem_free_action)
hide_button = pd.Button(
screen,
align=pd.ALIGN.OUTER_LEFT,
align_to=button1,
value="Hide",
label="Hide",
)
hide_button.add_event_cb(pd.events.MOUSEBUTTONDOWN, lambda sender, e: hide_button.hide(True))
jmp_button = pd.Button(
screen, align=pd.ALIGN.OUTER_RIGHT, align_to=button1, value="Jump", label="Jump"
)
def jump(sender, event):
if jmp_button.align == pd.ALIGN.OUTER_RIGHT:
jmp_button.set_position(align=pd.ALIGN.OUTER_LEFT)
else:
jmp_button.set_position(align=pd.ALIGN.OUTER_RIGHT)
jmp_button.add_event_cb(pd.events.MOUSEBUTTONUP, (jump))
radio_group = pd.RadioGroup()
radio1 = pd.RadioButton(
screen, group=radio_group, y=10, align_to=checkbox, align=pd.ALIGN.OUTER_BOTTOM, value=False
)
r1_label = pd.Label(radio1, value="Radio 1", align=pd.ALIGN.OUTER_RIGHT, scale=2)
radio2 = pd.RadioButton(
screen, group=radio_group, align_to=radio1, align=pd.ALIGN.OUTER_BOTTOM, value=True
)
r2_label = pd.Label(radio2, value="Radio 2", align=pd.ALIGN.OUTER_RIGHT, scale=2)
radio1.add_event_cb(
pd.events.MOUSEBUTTONDOWN,
lambda sender, e: status.set_value(
f"RadioButton 1 is now {'checked' if sender.value else 'unchecked'}"
),
)
radio2.add_event_cb(
pd.events.MOUSEBUTTONDOWN,
lambda sender, e: status.set_value(
f"RadioButton 2 is now {'checked' if sender.value else 'unchecked'}"
),
)
scrollbar2 = pd.ScrollBar(
screen, align_to=status, align=pd.ALIGN.OUTER_TOP, vertical=False, value=0.5, reverse=REVERSE
)
scrollbar2.slider.add_event_cb(
pd.events.MOUSEBUTTONDOWN,
lambda sender, e: status.set_value(f"ScrollBar value: {sender.value:.2f}"),
)
slider1 = pd.Slider(
screen, align_to=scrollbar2, align=pd.ALIGN.OUTER_TOP, value=0.5, step=0.05, reverse=REVERSE
)
slider1.add_event_cb(
pd.events.MOUSEBUTTONDOWN,
lambda sender, e: status.set_value(f"Slider value: {sender.value:.2f}"),
)
# # Simulate a scroll bar. Shows how to add an Icon to a Button. Also shows how to use an IconButton.
pbar = pd.ProgressBar(
screen,
y=slider1.y - screen.height,
w=display.width // 2,
align=pd.ALIGN.BOTTOM,
value=0.5,
reverse=REVERSE,
)
pbar.add_event_cb(
pd.events.MOUSEBUTTONDOWN, lambda sender, e: status.set_value(f"Progress: {sender.value:.0%}")
)
pbtn1 = pd.Button(pbar, w=22, h=22, align=pd.ALIGN.OUTER_LEFT)
pbtn1_icon = pd.Icon(
pbtn1, align=pd.ALIGN.CENTER, value=pd.icon_theme.left_arrow(pd.ICON_SIZE.SMALL)
) # noqa: F841
pbtn2 = pd.IconButton(
pbar, align=pd.ALIGN.OUTER_RIGHT, icon_file=pd.icon_theme.right_arrow(pd.ICON_SIZE.SMALL)
)
pbtn1.add_event_cb(pd.events.MOUSEBUTTONDOWN, lambda sender, e: pbar.set_value(pbar.value - 0.1))
pbtn2.add_event_cb(pd.events.MOUSEBUTTONDOWN, lambda sender, e: pbar.set_value(pbar.value + 0.1))
clock = pd.DigitalClock(screen, align=pd.ALIGN.TOP_RIGHT)
screen.visible = True
polling = not display.timer
print("Polling" if polling else "Timer running")
while polling:
pd.tick()