magicblue icon indicating copy to clipboard operation
magicblue copied to clipboard

Tkinter GUI

Open kaitoxakimoto opened this issue 8 years ago • 3 comments

it's a very very simple prototype (in fact, i declare the use of my bulb's mac in the first declaration) but i think the use of Tkinter could be very useful to implement!

from tkinter import *
from magicblue import MagicBlue

#CHANGE THE BULB MAC HERE
bulb_mac_address = 'F8:1D:78:60:8E:0F'
bulb = MagicBlue(bulb_mac_address, 10) # Replace 9 by whatever your version is (default: 7)
bulb.connect()

def switch():
	global first
	if first:
		return
	try:
		inf=bulb.get_device_info()
	except:
		bulb.connect()
		inf=bulb.get_device_info()
	if inf["on"]:
		bulb.turn_off()
	else:
		bulb.turn_on()
	
def change_red(re):
	global first
	if first:
		return
	try:
		inf=bulb.get_device_info()
	except:
		bulb.connect()
	color=map(int,(r.get(),g.get(),b.get()))
	bulb.set_color(color)

def change_green(gr):
	global first
	if first:
		return
	try:
		inf=bulb.get_device_info()
	except:
		bulb.connect()
	color=map(int,(r.get(),g.get(),b.get()))
	bulb.set_color(color)

def change_blue(bl):
	global first
	if first:
		return
	try:
		inf=bulb.get_device_info()
	except:
		bulb.connect()
	color=map(int,(r.get(),g.get(),b.get()))
	bulb.set_color(color)
	
def change_bright(br):
	global first
	if first:
		first = False
		return
	try:
		inf=bulb.get_device_info()
	except:
		bulb.connect()
	bulb.set_warm_light(bright.get()/255.0)	
	
	
	
w = Tk()	
	
#Models

r=IntVar()
g=IntVar()
b=IntVar()
bright=IntVar()

#First Check
inf=bulb.get_device_info()
r.set(inf["r"])
g.set(inf["g"])
b.set(inf["b"])
bright.set(inf["brightness"])
first=True

#Power Button

switch=Button(w,text="On / Off",command=switch)
switch.pack()

#First Frame

color_frame=Frame(w)
color_frame.pack()

#RGB

rgb_frame=Frame(color_frame,bd=10)
rgb_frame.grid(row=0,column=0)

red=Scale(rgb_frame, variable = r,orient=HORIZONTAL,to = 255, command = change_red, resolution = 5)
Label(rgb_frame,text="Red").pack()
red.pack()

green=Scale(rgb_frame, variable = g,orient=HORIZONTAL,to = 255, command = change_green, resolution = 5)
Label(rgb_frame,text="Green").pack()
green.pack()

blue=Scale(rgb_frame, variable = b , orient = HORIZONTAL , to = 255, command = change_blue, resolution = 5)
Label(rgb_frame,text="Blue").pack()
blue.pack()

#Bright

bright_frame=Frame(color_frame,bd=10)
bright_frame.grid(row=0,column=1)

bright=Scale(bright_frame, variable = bright , orient = VERTICAL ,from_ = 255, to = 0	, command = change_bright, resolution = -5)
Label(bright_frame,text="Brightness").pack()
bright.pack()



w.mainloop()

bulb.disconnect()

it looks like this for now: image

kaitoxakimoto avatar Sep 19 '17 23:09 kaitoxakimoto

This is cool! We have to think about how relevant it is to integrate it in this project as this is mainly used on Raspberry Pi or shell scripts at the moment, but I like the idea of a simple GUI that could be useful for "non-technical" users willing to use their bulbs from their PC.

Any arguments or ideas are welcome

Betree avatar Sep 20 '17 23:09 Betree

My python skills are not great, but I would imagine you can distribute a separate magicblue-gui package that depends on the magicblue package via pip, correct?

...After looking at the docker-compose package, it looks like these dependencies are called "Requires Distributions"

styfle avatar Sep 21 '17 00:09 styfle

@styfle Yes, I prefer this approach rather than integrating a GUI directly on this project

Betree avatar Sep 21 '17 04:09 Betree