Skip to content

Commit 0f3c7e1

Browse files
authored
bugfix: brightness in single led
update: single_led_tab
2 parents b56f38b + 73d6f9f commit 0f3c7e1

File tree

13 files changed

+94
-33
lines changed

13 files changed

+94
-33
lines changed
Binary file not shown.
Binary file not shown.

desktop_app/GUI/ColorTab/color_picker_rgb.py

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,12 @@ def __init__(self, master, *args, **kwargs) -> None:
166166
progress_color="#C2C0BA",
167167
button_color="#E0DEDA",
168168
button_hover_color="#EAE9E6",
169-
from_=0,
169+
from_=-255,
170170
to=255,
171-
number_of_steps=256,
171+
number_of_steps=511,
172172
command=self._update_color_from_slider,
173173
)
174-
self._brightness_slider.set(255)
174+
self._brightness_slider.set(0)
175175
self._brightness_slider.grid(
176176
row=4, column=1, padx=ColorPickerRGB._PADX, pady=10
177177
)
@@ -221,16 +221,26 @@ def _update_color_from_slider(self, value: float = 0) -> None:
221221
self.update_command(self._rgb)
222222

223223
def _set_rgb(self) -> None:
224-
brightness = self._brightness_slider.get() / 255
225-
226-
self._rgb = (
227-
int(round(self._red_slider.get()) * brightness),
228-
int(round(self._green_slider.get()) * brightness),
229-
int(round(self._blue_slider.get()) * brightness),
224+
self._raw_rgb = (
225+
int(round(self._red_slider.get())),
226+
int(round(self._green_slider.get())),
227+
int(round(self._blue_slider.get())),
230228
)
231229

230+
brightness = self._brightness_slider.get()
231+
232+
if brightness >= 0:
233+
brightness_factor = 1 + (brightness / 255)
234+
self._rgb = tuple(
235+
min(255, int(c * brightness_factor)) for c in self._raw_rgb
236+
)
237+
else:
238+
brightness_factor = 1 + (brightness / 255)
239+
self._rgb = tuple(max(0, int(c * brightness_factor)) for c in self._raw_rgb)
240+
232241
def update_from_animation_tab(self, value) -> None:
233-
self._brightness_slider.set(value)
242+
mapped_value = (value * 2) - 255
243+
self._brightness_slider.set(mapped_value)
234244
self._update_color_from_slider()
235245

236246
def _update_color_display(self, rgb: tuple[int, int, int]) -> None:
@@ -266,17 +276,24 @@ def _update_color_from_entry(self) -> None:
266276
self._update_entry_text(self._rgb)
267277
self._update_color_picker_hex_entry(self._rgb)
268278

269-
def update_rgb_from_hex(self, hex_code) -> None:
279+
def update_rgb_from_hex(self, hex_code, brightness: int = None) -> None:
270280
hex_code = hex_code.lstrip("#")
271281
self._rgb = tuple(int(hex_code[i : i + 2], 16) for i in (0, 2, 4))
282+
self._raw_rgb = self._rgb
272283

273284
self._update_color_display(self._rgb)
274285
self._update_entry_text(self._rgb)
275286

276287
self._red_slider.set(self._rgb[0])
277288
self._green_slider.set(self._rgb[1])
278289
self._blue_slider.set(self._rgb[2])
279-
self._brightness_slider.set(255)
290+
291+
if brightness is not None:
292+
mapped_brightness = (brightness * 2) - 255
293+
self._brightness_slider.set(mapped_brightness)
294+
else:
295+
self._brightness_slider.set(0)
296+
280297
self.update_command(self._rgb)
281298

282299
def _update_color_picker_hex_entry(self, rgb: tuple[int, int, int]) -> None:
@@ -287,7 +304,8 @@ def _update_color_picker_hex_entry(self, rgb: tuple[int, int, int]) -> None:
287304

288305
def _update_single_led(self, rgb: tuple[int, int, int]) -> None:
289306
if hasattr(self._master, "_single_led_display"):
290-
self._master.change_single_led_color(self.convert_rgb_to_hex(rgb=rgb))
307+
brightness_value = int(((self._brightness_slider.get() + 255) / 2))
308+
self._master.change_single_led_color(rgb, brightness_value)
291309

292310
def update_command(self, rgb: tuple[int, int, int]) -> None:
293311
self._master.command = f"ledOn?r={rgb[0]}&g={rgb[1]}&b={rgb[2]}"
@@ -298,4 +316,4 @@ def rgb(self) -> tuple[int, int, int]:
298316

299317
@property
300318
def brightness_slider_value(self) -> float:
301-
return self._brightness_slider.get()
319+
return (self._brightness_slider.get() + 255) / 2
Binary file not shown.

desktop_app/GUI/DeviceTab/loading_frame.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ def __init__(
2020
self._master = master
2121
self._top_menu_bar = self._master.top_menu_bar
2222
self._arduino_manager = self._master.arduino_manager
23-
self._content_frame = ctk.CTkFrame(self)
23+
self._content_frame = ctk.CTkFrame(
24+
self,
25+
fg_color="gray20",
26+
)
2427
self._content_frame.grid_rowconfigure((0, 1), weight=1)
2528
self._content_frame.grid_columnconfigure(0, weight=1)
2629

Binary file not shown.

desktop_app/GUI/Menus/bot_menu_bar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def _post(self) -> None:
8585
self._master.top_menu_bar.active_tab, "_save_arduino_single_led_setting"
8686
):
8787
self._master.top_menu_bar.active_tab._save_arduino_single_led_setting(
88-
url.replace(f"http://{arduino.ip_address}/", ""), arduino
88+
arduino
8989
)
9090

9191
self._save_last_command(arduino, url)
Binary file not shown.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import customtkinter as ctk
2+
3+
4+
class LED(ctk.CTkFrame):
5+
def __init__(
6+
self, master, rgb: tuple[int, int, int], brightness: int, *args, **kwargs
7+
) -> None:
8+
super().__init__(
9+
master,
10+
corner_radius=15,
11+
height=50,
12+
width=50,
13+
border_color="black",
14+
fg_color="black",
15+
border_width=4,
16+
*args,
17+
**kwargs
18+
)
19+
20+
self._rgb = rgb
21+
self._brightness = brightness
22+
23+
@property
24+
def rgb(self) -> tuple[int, int, int]:
25+
return self._rgb
26+
27+
@rgb.setter
28+
def rgb(self, value: int) -> None:
29+
self._rgb = value
30+
31+
@property
32+
def brightness(self) -> int:
33+
return self._brightness
34+
35+
@brightness.setter
36+
def brightness(self, value: int) -> None:
37+
self._brightness = value

desktop_app/GUI/SingleLEDControllTab/single_led_controll_tab.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,18 @@ def __init__(self, master, top_menu_bar, *args, **kwargs) -> None:
3939
pady=SingleLEDControllTab._PADY,
4040
)
4141

42-
def change_single_led_color(self, value: str) -> None:
42+
def change_single_led_color(
43+
self, rgb: tuple[int, int, int], brightness: int
44+
) -> None:
4345
if self._single_led_display.led is None:
4446
return
4547

46-
self._single_led_display.led.configure(True, fg_color=value)
48+
self._single_led_display.led.rgb = rgb
49+
self._single_led_display.led.brightness = brightness
50+
51+
self._single_led_display.led.configure(
52+
True, fg_color=self._color_picker_rgb.convert_rgb_to_hex(rgb)
53+
)
4754
self._single_led_display.update_dict(
4855
self._single_led_display.led, self._single_led_display.key
4956
)
@@ -67,12 +74,14 @@ def update_command(self, value: dict) -> None:
6774

6875
self._command = f"singleLED?singleLED={ziped_list}"
6976

70-
def _save_arduino_single_led_setting(self, value, arduino: Arduino) -> None:
77+
def _save_arduino_single_led_setting(self, arduino: Arduino) -> None:
7178
if not self._options_menu.get() in self._options_menu.device_map:
7279
return
7380

74-
arduino.single_led = ast.literal_eval(value.replace("singleLED?singleLED=", ""))
81+
arduino.single_led = ast.literal_eval(
82+
self._command.replace("singleLED?singleLED=", "")
83+
)
7584

7685
self._options_menu.arduino_manager.update_arduino(
77-
arduino, arduino.single_led, "single_led"
86+
arduino, arduino.single_led, "_single_led"
7887
)

desktop_app/GUI/SingleLEDControllTab/single_led_display.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from ArduinoBackend.arduino import Arduino
66
from GUI.ColorTab.color_picker_rgb import ColorPickerRGB
77
from GUI.Menus.options_menu import OptionsMenu
8+
from GUI.SingleLEDControllTab.led import LED
89

910

1011
class SingleLEDDisplay(ctk.CTkFrame):
@@ -83,15 +84,7 @@ def draw_leds(self) -> None:
8384
if i % self._elements_per_row == 0:
8485
row += 1
8586

86-
led = ctk.CTkFrame(
87-
self._content_frame,
88-
corner_radius=15,
89-
height=50,
90-
width=50,
91-
border_color="black",
92-
fg_color="black",
93-
border_width=4,
94-
)
87+
led = LED(self._content_frame, (0, 0, 0), brightness=255)
9588
led.bind(
9689
"<Button-1>", lambda event, led=led, key=i: self._on_click_led(led, key)
9790
)
@@ -132,10 +125,11 @@ def _on_click_led(self, led: ctk.CTkFrame, key: int) -> None:
132125
self._led.configure(True, border_color="black")
133126

134127
led.configure(True, border_color="gray25")
135-
self._led = led
128+
self._led: LED = led
136129
self._key = key
137130
self._color_picker_rgb.update_rgb_from_hex(
138-
"#000000" if self._led._fg_color == "black" else self._led._fg_color
131+
"#000000" if self._led._fg_color == "black" else self._led._fg_color,
132+
self._led.brightness,
139133
)
140134

141135
def _request_led_count(self) -> None:
@@ -164,7 +158,7 @@ def update_dict(self, led: ctk.CTkFrame, key: int) -> None:
164158
self._master.update_command(self._led_dict)
165159

166160
@property
167-
def led(self) -> ctk.CTkFrame:
161+
def led(self) -> LED:
168162
return self._led
169163

170164
@property

0 commit comments

Comments
 (0)