Repository URL to install this package:
|
Version:
0.3.6-1 ▾
|
import os
import customtkinter as ctk
from PIL import Image
# Appearance and Theme set up
ctk.set_appearance_mode('Dark')
# STATIC PATHS
SETTINGS_PATH = os.path.expanduser('~/.config/kbd_settings/')
if not os.path.exists(SETTINGS_PATH):
os.makedirs(SETTINGS_PATH)
# RGB
# generic path
DRIVER_PATH = '/sys/class/leds'
TEST_PATH = 'rgb:kbd_backlight_1'
TEST_PATH_FULL = os.path.join(DRIVER_PATH, TEST_PATH)
KEYBOARD_PATH = DRIVER_PATH + '/rgb:kbd_backlight'
BRIGHTNESS_PATH_FILE = KEYBOARD_PATH + '/brightness'
LOCAL_BRIGHTNESS_PATH_FILE = os.path.expanduser('~/.config/kbd_settings/user_brightness')
if not os.path.exists(LOCAL_BRIGHTNESS_PATH_FILE):
with open(LOCAL_BRIGHTNESS_PATH_FILE, 'w') as file:
if not os.path.exists(TEST_PATH_FULL):
file.write('25')
else:
file.write('3')
COLOR_PATH_FILE = KEYBOARD_PATH + '/multi_intensity'
LOCAL_COLOR_PATH_FILE = os.path.expanduser('~/.config/kbd_settings/user_color')
if not os.path.exists(LOCAL_COLOR_PATH_FILE):
with open(LOCAL_COLOR_PATH_FILE, 'w') as file:
file.write('')
# RGB PER KEY
RGB_LOCAL_COLOR_PATH_FILE = os.path.expanduser('~/.config/kbd_settings/user_rgb_color')
if not os.path.exists(RGB_LOCAL_COLOR_PATH_FILE):
with open(RGB_LOCAL_COLOR_PATH_FILE, 'w') as file:
file.write('')
img_blue = ctk.CTkImage(Image.open(r'colors/blue.png'), size=(35, 25))
img_cyan = ctk.CTkImage(Image.open(r'colors/cyan.png'), size=(35, 25))
img_green = ctk.CTkImage(Image.open(r'colors/green.png'), size=(35, 25))
img_yellow = ctk.CTkImage(Image.open(r'colors/yellow.png'), size=(35, 25))
img_red = ctk.CTkImage(Image.open(r'colors/red.png'), size=(35, 25))
img_magenta = ctk.CTkImage(Image.open(r'colors/magenta.png'), size=(35, 25))
img_white = ctk.CTkImage(Image.open(r'colors/white.png'), size=(35, 25))
# Main window
def update_brightness(value):
# Update the brightness value
local_brightness = int(value)
with open(LOCAL_BRIGHTNESS_PATH_FILE, 'w') as f:
f.write(str(local_brightness))
with open(LOCAL_BRIGHTNESS_PATH_FILE, 'r') as k:
brightness = str(k.read())
with open(BRIGHTNESS_PATH_FILE, 'w') as g:
g.write(str(brightness))
def set_color(r, g, b):
if not os.path.exists(TEST_PATH_FULL):
with open(LOCAL_COLOR_PATH_FILE, 'w') as f:
f.write(str(f'{r} {g} {b}'))
with open(COLOR_PATH_FILE, 'w') as f:
f.write(str(f'{r} {g} {b}'))
else:
# Iterate over folders starting with 'kbd:'
for folder_name in os.listdir(DRIVER_PATH):
if folder_name.startswith('rgb:kbd_backlight'):
folder_path_kbd = os.path.join(DRIVER_PATH, folder_name)
file_path = os.path.join(folder_path_kbd, 'multi_intensity')
with open(file_path, 'w') as file:
file.write(f'{r} {g} {b}')
with open(RGB_LOCAL_COLOR_PATH_FILE, 'w') as f:
f.write(str(f'{r} {g} {b}'))
# def save_settings():
# with open(BRIGHTNESS_PATH_FILE, 'r') as f:
# brightness = int(f.read())
# with open(LOCAL_BRIGHTNESS_PATH_FILE, 'w') as g:
# g.write(str(f'{brightness}'))
# with open(COLOR_PATH_FILE, 'r') as f:
# color = str(f.read())
# with open(LOCAL_COLOR_PATH_FILE, 'w') as g:
# g.write(str(f'{color}'))
# def load_color_settings():
# with open(LOCAL_COLOR_PATH_FILE, 'r') as f:
# color = str(f.read())
# with open(COLOR_PATH_FILE, 'w') as g:
# g.write(str(f'{color}'))
class App(ctk.CTk):
def __init__(self, brightness_slider=None):
super().__init__()
self.title('Keyboard Backlight Controller')
self.resizable(width=False, height=False)
with open(LOCAL_BRIGHTNESS_PATH_FILE, 'r') as b:
brightness = b.read()
with open(BRIGHTNESS_PATH_FILE, 'w') as b:
b.write(brightness)
if not os.path.exists(TEST_PATH_FULL):
with open(LOCAL_COLOR_PATH_FILE, 'r') as c:
color = str(c.read())
with open(COLOR_PATH_FILE, 'w') as c:
c.write(str(color))
else:
with open(RGB_LOCAL_COLOR_PATH_FILE, 'r') as c:
color = str(c.read())
for folder_name in os.listdir(DRIVER_PATH):
if folder_name.startswith('rgb:kbd_backlight'):
folder_path_kbd = os.path.join(DRIVER_PATH, folder_name)
file_path = os.path.join(folder_path_kbd, 'multi_intensity')
with open(file_path, 'w') as file:
file.write(f'{color}')
# ADD WIDGETS
# Frame - Brightness
brightness_frame = ctk.CTkFrame(master=self, fg_color='#242424')
brightness_frame.grid(row=0, column=0, padx=5, pady=5, sticky='nsew')
# Label - Brightness
brightness_label = ctk.CTkLabel(master=brightness_frame, text='Brightness: ')
brightness_label.grid(row=0, column=0, padx=5, pady=5, sticky='nsw')
# Slider - Brightness - Range 0 to 255
if not os.path.exists(TEST_PATH_FULL):
brightness_slider = ctk.CTkSlider(master=brightness_frame, width=222, from_=0, to=255, number_of_steps=256,
button_color='#373737', button_hover_color='#404040',
command=update_brightness)
brightness_slider.grid(row=0, column=1, padx=(0, 2), pady=5, sticky='nsew')
brightness_slider.set(int(brightness))
else:
brightness_slider = ctk.CTkSlider(master=brightness_frame, width=222, from_=0, to=10, number_of_steps=11,
button_color='#373737', button_hover_color='#404040',
command=update_brightness)
brightness_slider.grid(row=0, column=1, padx=(0, 2), pady=5, sticky='nsew')
brightness_slider.set(int(brightness))
# Frame - Color - main
color_frame_main = ctk.CTkFrame(master=self, fg_color='#242424')
color_frame_main.grid(row=1, column=0, padx=5, pady=(5, 0), sticky='nsew')
# Label - Color
color_label = ctk.CTkLabel(master=color_frame_main, text='Pick a Color: ')
color_label.grid(row=0, column=0, padx=5, pady=1, sticky='nw')
# Frame - Color - sec
color_frame_sec = ctk.CTkFrame(master=self, fg_color='#242424')
color_frame_sec.grid(row=2, column=0, padx=5, pady=(0, 5), sticky='nsew')
# Buttons - Color - 7 default colours
# Button - Blue
button_blue = ctk.CTkButton(master=color_frame_sec, image=img_blue, text='', width=35, height=25,
fg_color='#0000ff', hover_color='#404040', corner_radius=1,
command=lambda: set_color(0, 0, 255))
button_blue.grid(row=0, column=0, padx=(2, 1), pady=5, sticky='nsew')
# Button - Cyan
button_cyan = ctk.CTkButton(master=color_frame_sec, image=img_cyan, text='', width=35, height=25,
fg_color='#00ffff', hover_color='#404040', corner_radius=0,
command=lambda: set_color(0, 255, 255))
button_cyan.grid(row=0, column=1, padx=1, pady=5, sticky='nsew')
# Button - Green
button_green = ctk.CTkButton(master=color_frame_sec, image=img_green, text='', width=35, height=25,
fg_color='#00ff00', hover_color='#404040', corner_radius=0,
command=lambda: set_color(0, 255, 0))
button_green.grid(row=0, column=2, padx=1, pady=5, sticky='nsew')
# Button - Yellow
button_yellow = ctk.CTkButton(master=color_frame_sec, image=img_yellow, text='', width=35, height=25,
fg_color='#ffff00', hover_color='#404040', corner_radius=0,
command=lambda: set_color(255, 255, 0))
button_yellow.grid(row=0, column=3, padx=1, pady=5, sticky='nsew')
# Button - Red
button_red = ctk.CTkButton(master=color_frame_sec, image=img_red, text='', width=35, height=25,
fg_color='#ff0000', hover_color='#404040', corner_radius=0,
command=lambda: set_color(255, 0, 0))
button_red.grid(row=0, column=4, padx=1, pady=5, sticky='nsew')
# Button - Magenta
button_magenta = ctk.CTkButton(master=color_frame_sec, image=img_magenta, text='', width=35, height=25,
fg_color='#ff00ff', hover_color='#404040', corner_radius=0,
command=lambda: set_color(255, 0, 255))
button_magenta.grid(row=0, column=5, padx=1, pady=5, sticky='nsew')
# Button - White
button_white = ctk.CTkButton(master=color_frame_sec, image=img_white, text='', width=35, height=25,
fg_color='#ffffff', hover_color='#404040', corner_radius=0,
command=lambda: set_color(255, 255, 255))
button_white.grid(row=0, column=6, padx=(1, 2), pady=5, sticky='nsew')
# Reset back to White with 25 brightness
if not os.path.exists(TEST_PATH_FULL):
x = 25
else:
x = 3
button_reset = ctk.CTkButton(master=self, fg_color='#373737', hover_color='#404040', text='Reset',
command=lambda: [set_color(255, 255, 255), update_brightness(x), set_slider()])
button_reset.grid(row=3, column=0, padx=10, pady=10, sticky='e')
def set_slider():
with open(LOCAL_BRIGHTNESS_PATH_FILE, 'r') as b:
brightness = b.read()
with open(BRIGHTNESS_PATH_FILE, 'w') as b:
b.write(brightness)
brightness_slider.set(int(brightness))
app = App()
app.mainloop()