@@ -165,6 +165,17 @@ async def _saturation_callback(self):
165165 async def _brightness_callback (self ):
166166 return await update_bulb (self .bulb , self .brightness_slider .get ())
167167
168+ async def _power_callback (self ):
169+ self .power_button ["state" ] = tkinter .DISABLED
170+
171+ try :
172+ await (self .bulb .turn_off () if self .bulb .is_on else self .bulb .turn_on ())
173+ await self .bulb .update ()
174+ finally :
175+ self .power_button ["relief" ] = "sunken" if is_on else "raised"
176+ self .power_button ["text" ] = "Turn Off" if is_on else "Turn On"
177+ self .power_button ["state" ] = tkinter .NORMAL
178+
168179 @classmethod
169180 def for_bulb (cls , loop , bulb : kasa .SmartBulb , config , * args , ** kwargs ):
170181 """Create a new bulb frame given a SmartBulb
@@ -220,14 +231,29 @@ def for_bulb(cls, loop, bulb: kasa.SmartBulb, config, *args, **kwargs):
220231 self , bulb_name , lambda new_device_name : logger .info (new_device_name )
221232 ).grid (column = 0 , row = 0 , columnspan = 3 )
222233
223- self .hue_label .grid (column = 0 , row = 1 )
224- self .hue_slider .grid (column = 0 , row = 2 )
234+ self .power_button = tkinter .Button (
235+ self ,
236+ text = "Turn Off" if self .bulb .is_on else "Turn On" ,
237+ width = 12 ,
238+ relief = "sunken" if self .bulb .is_on else "raised" ,
239+ )
240+ self .power_button .bind ("<ButtonRelease-1>" ,
241+ lambda event , self = self , loop = loop : asyncio .run_coroutine_threadsafe (
242+ self ._power_callback (), loop
243+ ),
244+ )
245+
246+ self .power_button .grid (column = 0 , row = 1 )
247+ self .power_button .grid (column = 0 , row = 2 )
248+
249+ self .hue_label .grid (column = 1 , row = 1 )
250+ self .hue_slider .grid (column = 1 , row = 2 )
225251
226- self .saturation_label .grid (column = 1 , row = 1 )
227- self .saturation_slider .grid (column = 1 , row = 2 )
252+ self .saturation_label .grid (column = 2 , row = 1 )
253+ self .saturation_slider .grid (column = 2 , row = 2 )
228254
229- self .brightness_label .grid (column = 2 , row = 1 )
230- self .brightness_slider .grid (column = 2 , row = 2 )
255+ self .brightness_label .grid (column = 3 , row = 1 )
256+ self .brightness_slider .grid (column = 3 , row = 2 )
231257
232258 return self
233259
0 commit comments