from Tkinter import * import re import threading import time def rgbToTkColor(r, g, b): if not (0 <= r <= 1 and 0 <= g <= 1 and 0 <= b <= 1): print "invalid r={}, g={}, b={}".format(r, g, b) assert(False) r_hex = int(r * 0xFF) g_hex = int(g * 0xFF) b_hex = int(b * 0xFF) return "#{:02x}{:02x}{:02x}".format(r_hex, g_hex, b_hex) class DummyLight(object): WIDTH_PX = 8 HEIGHT_PX = 20 def __init__(self, canvas): self.canvas = canvas self.color = (0, 0, 0) def setRGBRaw(self, r, g, b): self.color = (r, g, b) self.canvas.itemconfig(self.rect_id, fill=rgbToTkColor(*self.color)) class DummyRig(object): def __init__(self, width, height): self.width = width self.height = height self.margin = 5 def init(self): self.root = Tk() self.canvas = Canvas(self.root, width=self.width*DummyLight.WIDTH_PX + self.margin*2, height=self.height*DummyLight.HEIGHT_PX + self.margin*2) self.canvas.pack() self.root.resizable(width=0, height=0) self.lights = [[DummyLight(self.canvas) for _ in xrange(self.height)] for _ in xrange(self.width)] self.rootThread = threading.Thread(target=self.root.mainloop) self.rootThread.start() self.initRects() def select(self, pattern): match = re.search("\$side=(.*?)\[\$sequence=(.*?)\]", pattern) if match.group(1) == "bot": y = 1 elif match.group(1) == "top": y = 0 x = int(match.group(2)) - 1 return self.lights[x][y] def updateOnce(self): pass def initRects(self): for x in xrange(self.width): for y in xrange(self.height): light = self.lights[x][y] x0 = self.margin + x * DummyLight.WIDTH_PX y0 = self.margin + y * DummyLight.HEIGHT_PX light.rect_id = self.canvas.create_rectangle(x0, y0, x0 + DummyLight.WIDTH_PX, y0 + DummyLight.HEIGHT_PX, width=1)