Skip to content

Commit 91bd3f5

Browse files
committed
Add power button
1 parent d00c0ab commit 91bd3f5

1 file changed

Lines changed: 32 additions & 6 deletions

File tree

kasatk/__main__.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)