Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from functools import partial
from math import sin, cos, radians
try:
# Tkinter for Python 2.xx
import Tkinter as tk
except ImportError:
# Tkinter for Python 3.xx
import tkinter as tk
APP_TITLE = "LED-Rosette"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 500
APP_HEIGHT = 500
LEDS = 24
LED_GEOMETRY = 20
LED_ON = 'red'
LED_OFF = 'green'
LED_ANGLE_GAP = 360 / LEDS
RADIUS = 200
class LedRosette(tk.Canvas):
def __init__(self, master=None, **kwargs):
tk.Canvas.__init__(self, master, **kwargs)
self.angle = 0
self.x_center = (APP_WIDTH / 2)
self.y_center = (APP_HEIGHT / 2)
self.button_states = [False]*LEDS
for led_nr in range(LEDS):
xpos, ypos = self.place_coords()
button = tk.Button(self, bg=LED_OFF, activebackground=LED_OFF)
button.place(x=0, y=0, width=LED_GEOMETRY, height=LED_GEOMETRY)
button.bind('<Button-1>', partial(self.callback, led_nr))
self.create_window(xpos, ypos, window=button)
def place_coords(self):
x = RADIUS * sin(radians(self.angle)) + self.x_center
y = RADIUS * cos(radians(180 + self.angle)) + self.y_center
self.angle += LED_ANGLE_GAP
return x, y
def callback(self, led_nr, event):
print('LED-{}'.format(led_nr))
widget = event.widget
if widget['bg'] == LED_ON:
self.button_states[led_nr] = False
widget['bg'] = LED_OFF
widget['activebackground'] = LED_OFF
else:
self.button_states[led_nr] = True
widget['bg'] = LED_ON
widget['activebackground'] = LED_ON
print(self.button_states)
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
app_win.option_add('*highlightThickness', 0)
LedRosette(app_win, width=APP_WIDTH, height=APP_HEIGHT).pack()
app_win.mainloop()
if __name__ == '__main__':
main()