#!/home/user_name/project/venv/bin/python3.11
import tkinter as tk
import tkinter.font as TkFont
import RPi.GPIO as GPIO
# Setup GPIO
class GPIOController:
def __init__(self):
self.pins = {
24: GPIO.HIGH,
18: GPIO.LOW,
21: GPIO.LOW,
12: GPIO.LOW
}
GPIO.setmode(GPIO.BCM)
for pin, state in self.pins.items():
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, state)
def toggle_pin(self, pin):
current_state = GPIO.input(pin)
new_state = GPIO.LOW if current_state else GPIO.HIGH
GPIO.output(pin, new_state)
return new_state
def cleanup(self):
GPIO.cleanup()
class ControlPanelApp:
def __init__(self, master, gpio_controller):
self.master = master
self.gpio_controller = gpio_controller
self.master.geometry('400x400')
self.master.title("CONTROL PANEL")
self.master.configure(bg="black")
self.master.protocol("WM_DELETE_WINDOW", self.close)
self.frame_top = tk.Frame(self.master, bg="black", bd=5, relief=tk.SUNKEN)
self.frame_top.pack(fill=tk.X, side=tk.TOP)
self.btn_close = tk.Button(self.frame_top, text="✖", bg="red", fg="white", width=3, command=self.close)
self.btn_close.pack(side=tk.RIGHT, padx=2)
self.frame = tk.Frame(self.master, bg="black", bd=5, relief=tk.SUNKEN)
self.frame.pack()
self.myFont = TkFont.Font(family='Helvetica', size=36, weight='bold')
# Create buttons and store them
self.btn1 = self.create_button("LED1", 24)
self.btn2 = self.create_button("LED2", 18)
self.btn3 = self.create_button("LED3", 21)
self.btn4 = self.create_button("LED4", 12)
self.close_button = tk.Button(self.frame, text="Close", font=("consolas", 18), width=15, height=2,
bg="#003333", fg="green", activeforeground="white",
activebackground="black", command=self.close)
self.close_button.pack()
def create_button(self, label, pin):
button = tk.Button(self.frame, text=label, font=self.myFont,
command=lambda: self.toggle_led(pin), height=1, width=8,
bg='#003333', fg="green", activeforeground="#00ff00", activebackground="black")
button.pack()
return button
def toggle_led(self, pin):
new_state = self.gpio_controller.toggle_pin(pin)
# Map pin to button
if pin == 24:
button = self.btn1
elif pin == 18:
button = self.btn2
elif pin == 21:
button = self.btn3
elif pin == 12:
button = self.btn4
else:
return
button["text"] = f"LED{pin} {'ON' if new_state else 'OFF'}"
def close(self):
self.gpio_controller.cleanup()
self.master.destroy()
def main():
gpio_controller = GPIOController()
root = tk.Tk()
app = ControlPanelApp(root, gpio_controller)
root.mainloop()
if __name__ == "__main__":
main()