import tkinter as tk import traceback from __main__ import * import lib.mytklib as mytklib def draw_command(gui,xframe,data): frame_cmd=xframe i=0 c=0 r=0 frame = tk.Frame(frame_cmd,bg="black") frame.pack(fill=tk.X, side=tk.TOP) # b = tk.Button(frame,bg="lightblue", text="COMM.",width=6) #b.bind("<Button>",Xevent(fix=fix,elem=b).cb) #b.grid(row=r, column=c, sticky=tk.W+tk.E) #r+=1 c+=1 gui.commands.elem = {} for comm in gui.commands.commands: if comm == "\n": c=0 r+=1 continue v=0 b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2) if comm not in gui.commands.elem: gui.commands.elem[comm] = b gui.commands.val[comm] = 0 if comm == "BLIND": b["bg"] = "grey" myTip = Hovertip(b,'BLIND MODE\nNO CHANGE on DMX-OUTPUT') if comm == "CLEAR": b["bg"] = "grey" myTip = Hovertip(b,'CLEAR ALL SELECTED\nFIXTURES ATTRIBUTES') if comm == "REC-FX": b["bg"] = "grey" myTip = Hovertip(b,'RECORD ONLY FX\nINTO EXEC') if comm == "FADE": b["bg"] = "green" myTip = Hovertip(b,'adjust fade time') if comm == "S-KEY": b["bg"] = "green" myTip = Hovertip(b,'keyboard short-key\non or off') if comm == "FX OFF": b["bg"] = "magenta" if comm == "SIZE:": b["text"] = "SIZE:{:0.0f}".format(fx_prm["SIZE"]) if comm == "SPEED:": b["text"] = "SPEED:{:0.0f}".format(fx_prm["SPEED"]) if comm == "DELAY": b["text"] = "FADE:\n{:0.02f}".format(DELAY.val()) if comm == "FADE": b["text"] = "FADE:\n{:0.02f}".format(FADE.val()) if comm == "START:": b["text"] = "START:{:0.0f}".format(fx_prm["START"]) if comm == "OFFSET:": b["text"] = "OFFSET:{:0.0f}".format(fx_prm["OFFSET"]) if comm == "FX-X:": b["text"] = "FX-X:{}".format(fx_prm["FX-X"]) if comm == "BASE:": b["text"] = "BASE:{}".format(fx_prm["BASE"]) b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="COMMAND").cb) if comm: b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 if c >=8: c=0 r+=1 def draw_exec(gui,xframe,PRESETS): draw_preset(gui,xframe,PRESETS) def draw_preset(gui,xframe,PRESETS): i=0 c=0 r=0 root = xframe frame = tk.Frame(root,bg="black") frame.pack(fill=tk.X, side=tk.TOP) #time.sleep(0.1) gui.elem_presets = {} i=0 for k in PRESETS.val_presets: #print( PRESETS.val_presets[k]) if i%(10*8)==0 or i ==0: c=0 #b = tk.Label(frame,bg="black", text="" ) b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black") b.grid(row=r, column=c, sticky=tk.W+tk.E) r+=1 c=0 b = tk.Button(frame,bg="lightblue", text="EXEC " ) b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 b = tk.Button(frame,bg="lightblue", text="BANK " + str(int(i/(8*8))+1) ) b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 b = tk.Button(frame,bg="lightblue", text="NAME" ) b.grid(row=r, column=c, sticky=tk.W+tk.E) r+=1 c=0 i+=1 v=0 label = "" #if k in PRESETS.label_presets: # label = PRESETS.label_presets[k] # #print([label]) sdata=PRESETS.val_presets[k] BTN="go" if "CFG" in sdata:#["BUTTON"] = "GO" if "BUTTON" in sdata["CFG"]: BTN = sdata["CFG"]["BUTTON"] #bb = tk.Frame(frame, highlightbackground = "red", highlightthickness = 1, bd=0) #bb = tk.Canvas(frame, highlightbackground = "black", highlightthickness = 1, bd=1) #bb.configure(width=70, height=38) txt=str(k+1)+":"+str(BTN)+":"+str(len(sdata)-1)+"\n"+label b = mytklib.ExecButton(frame,text=txt) #b = tk.Button(bb,bg="grey", text=txt,width=7,height=2) b.bind("<Button>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb) b.bind("<ButtonRelease>",Xevent(fix=0,elem=b,attr=k,data=gui,mode="PRESET").cb) if k not in gui.elem_presets: #print(b) gui.elem_presets[k] = b #b.pack(expand=1) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.config(text="xx") c+=1 if c >=10: c=0 r+=1 time.sleep(0.1) gui._refresh_exec() #gui.refresh_exec() #gui.refresh_exec() print("##################################") def draw_input(gui,root2): i=0 c=0 r=0 frame = tk.Frame(root2,bg="black") frame.pack(fill=tk.X, side=tk.TOP) b = tk.Label(frame,bg="black", text="------------------------ ---------------------------------------") b.grid(row=r, column=c, sticky=tk.W+tk.E) r=0 frame = tk.Frame(root2,bg="black") frame.pack(fill=tk.X, side=tk.TOP) b = tk.Label(frame, text="send:") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 b = tk.Entry(frame,bg="grey", text="",width=50) gui.entry = b b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","d0:127,fx241:sinus:50:50:10,fx243:cosinus:50:50:10,d201:127,fx201:sinus:50:300:10") r+=1 b = tk.Entry(frame,bg="grey", text="",width=20) gui.entry2 = b b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb) b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","d1:0:4") r+=1 b = tk.Entry(frame,bg="grey", text="",width=20) gui.entry3 = b b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) #b.bind("<B1-Motion>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","fx:alloff:::") def draw_colorpicker(gui,xframe,data): FIXTURES,master = data import lib.colorpicker as colp class _CB(): def __init__(gui,FIXTURES,master): gui.old_color = (0,0,0) def cb(gui,event,data): print("CB.cb",gui,event,data) cprint("colorpicker CB") if "color" not in data: return 0 if gui.old_color == data["color"]: pass #return 0 #gui.old_color = data["color"] color = data["color"] print("e",event,data) print("e",dir(event))#.keys()) try: print("e.state",event.state) except:pass set_fade = FADE.val() #fade event_ok = 0 event_num = 0 event_state = 0 if event is None: event_ok = 1 event_num = 3 elif event.num == 1: event_ok = 1 event_num = event.num elif event.num == 3: event_ok = 1 event_num = event.num elif event.num==2: event_ok = 1 event_num = event.num elif event.state in [256,1024]: event_ok = 1 event_state = event.state if "color" in data and event_ok: cr=None cg=None cb=None cw=0 ca=0 set_fade=0 if event_num == 1: if FADE._is(): set_fade=FADE.val() #fade cr = color[0] cg = color[1] cb = color[2] elif event_num == 3: cr = color[0] cg = color[1] cb = color[2] elif event_num == 2: cr= "click" cg= "click" cb= "click" cw= "click" ca= "click" elif event_state == 256: cr = color[0] cg = color[1] cb = color[2] if cr is not None: FIXTURES.encoder(fix=0,attr="RED",xval=cr,xfade=set_fade) if cg is not None: FIXTURES.encoder(fix=0,attr="GREEN",xval=cg,xfade=set_fade) if cb is not None: FIXTURES.encoder(fix=0,attr="BLUE",xval=cb,xfade=set_fade) FIXTURES.encoder(fix=0,attr="WHITE",xval=cw,xfade=set_fade) FIXTURES.encoder(fix=0,attr="AMBER",xval=ca,xfade=set_fade) master.refresh_fix() print("PICK COLOR:",data["color"]) _cb=_CB(FIXTURES,master) colp.colorpicker(xframe,width=580,height=113, xcb=_cb.cb) return 0 canvas=tk.Canvas(xframe,width=600,height=113) canvas["bg"] = "yellow" #"green" canvas.pack() # RGB x=0 y=0 j=0 d = 20 for i in range(0,d+1): fi = int(i*255/d) f = 255-fi if i > d/2: pass#break color = '#%02x%02x%02x' % (f, fi, fi) print( "farbe", i*10, j, f,fi,fi,color) r = canvas.create_rectangle(x, y, x+20, y+20, fill=color) x+=20 #def draw_config(gui,xframe): class GUI_CONF(): def __init__(self,gui,xframe,data): self.gui = gui self.data = data self.xframe = xframe self.draw() def draw(self): gui =self.gui xframe = self.xframe for widget in xframe.winfo_children(): widget.destroy() i=0 c=0 r=0 root2 = xframe frame = tk.Frame(root2,bg="#222") frame.pack(fill="both", expand=1,side=tk.TOP) b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c=0 r+=1 b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c=1 r+=1 b = tk.Label(frame, text="_________") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 b = tk.Entry(frame,bg="grey", text="",width=50) gui.entry = b #b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) #b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","" ) #d0:127,fx241:sinus:50:50:10,fx243:cosinus:50:50:10,d201:127,fx201:sinus:50:300:10") r+=1 b = tk.Entry(frame,bg="grey", text="",width=20) gui.entry2 = b #b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb) #b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT2").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","d1:0:4") r+=1 b = tk.Entry(frame,bg="grey", text="",width=20) gui.entry3 = b #b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) ##b.bind("<B1-Motion>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) #b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT3").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) b.insert("end","fx:alloff:::") r+=1 b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b = tk.Label(frame, text=" BATCH COMMAND ") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b1 = tk.Entry(frame,bg="grey", text="",width=50) #gui.entry = b #b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) #b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) b1.grid(row=r, column=c, sticky=tk.W+tk.E) b1.insert("end","fix 1-100 patch @ 2.120") r+=1 b = tk.Label(frame, text="",bg="#222") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b = tk.Label(frame, text=" BATCH COMMAND ") b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=0 r+=1 b2 = tk.Entry(frame,bg="grey", text="",width=50) #gui.entry = b #b.bind("<Button>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) #b.bind("<Key>",Xevent(fix=0,elem=b,attr="INPUT",data=gui,mode="INPUT").cb) b2.grid(row=r, column=c, sticky=tk.W+tk.E) b2.insert("end","SELECT 33-61 PAN,TILT") root2.pack(fill="both",expand=1,side="top") def draw_enc(gui,xframe,data=[]): FIXTURES = data.fixtures for widget in xframe.winfo_children(): widget.destroy() root2 = xframe i=0 c=0 r=0 frame = tk.Frame(xframe,bg="black") frame.pack( side=tk.LEFT,expand=0,fill="both") b = tk.Button(frame,bg="lightblue", text="ENCODER",width=6) b.grid(row=r, column=c, sticky=tk.W+tk.E) thread.start_new_thread(mytklib.tk_btn_bg_loop,(b,)) c+=1 eat = gui.all_attr[:] for fix in FIXTURES: for attr in FIXTURES[fix]["ATTRIBUT"]: if attr.startswith("_"): continue if attr not in eat: eat.append(attr) if len(eat) < 24: for i in range(24-len(eat)): eat.append("") for attr in eat: if attr.endswith("-FINE"): continue v=0 if attr.startswith("_"): continue b = tk.Button(frame,bg="#6e6e6e", text=str(attr)+'',width=7)#, anchor="w") if attr == "DIM": b = tk.Button(frame,bg="#ff7f00", text=str(attr)+'',width=7)#, anchor="w") b.bind("<Button>",Xevent(fix=0,elem=b,attr=attr,data=gui,mode="ENCODER2").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E ,ipadx=0,ipady=0,padx=0,pady=0)#,expand=True) c+=1 if c >=8: c=0 r+=1 b = tk.Button(frame,bg="#bfff00", text="INV-ATTR",width=6) myTip = Hovertip(b,'INVERT ATTRIBUT SELECTION') b.bind("<Button>",Xevent(fix="SEL",elem=b,attr="INV-ATTR",data=gui,mode="INVERT").cb) b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 def _draw_fx(frame,c,r,gui,mode="FX"): ct = gui.fx prm = fx_prm if mode=="FX-MOVE": ct = gui.fx_moves prm = fx_prm_move elif mode=="FX-GENERIC": ct = gui.fx_generic prm = fx_prm #_generic for comm in ct.commands: if comm == "\n\n": b = tk.Label(frame,bg="black", text="-",font=space_font) b.grid(row=r, column=c,pady=0,padx=0, sticky=tk.W+tk.E) c=0 r+=1 continue if comm == "\n": c=0 r+=1 continue v=0 if "PAN/TILT" in comm: b = tk.Button(frame,bg="grey", text=str(comm),width=6,height=2) else: b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2) if comm not in ct.elem: #comm = comm.replace("\n","") ct.elem[comm] = b ct.val[comm] = 0 b.bind("<Button>",Xevent_fx(fix=0,elem=b,attr=comm,data=gui,mode=mode).cb) if comm == "REC-FX": b["bg"] = "grey" elif comm == "FX OFF": b["bg"] = "magenta" elif comm[:3] == "FX:": b["text"] = comm b["bg"] = "#ffbf00" elif comm[:3] == "MO:": b["text"] = comm b["bg"] = "lightgreen" elif comm.startswith( "SIZE:"): b["text"] = "SIZE:\n{:0.0f}".format(prm["SIZE"]) b["bg"] = "lightgreen" elif comm.startswith( "SPEED:"): b["text"] = "SPEED:\n{:0.0f}".format(prm["SPEED"]) b["bg"] = "lightgreen" elif comm.startswith("START:"): b["bg"] = "lightgreen" b["text"] = "START:\n{:0.0f}".format(prm["START"]) elif comm.startswith( "OFFSET:"): b["bg"] = "lightgreen" b["text"] = "OFFSET:\n{:0.0f}".format(prm["OFFSET"]) elif comm[:3] == "BASE:": b["bg"] = "lightgreen" b["text"] = "BASE:\n{}".format(prm["BASE"]) elif comm[0] == "M": b["text"] = comm b["bg"] = "lightgrey" if comm: b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 if c >=6: c=0 r+=1 return c,r def draw_fx(gui,xframe,data=[]): frame_fx=xframe i=0 c=0 r=0 frame = tk.Frame(frame_fx,bg="black") frame.pack(fill=tk.X, side=tk.TOP) b = tk.Button(frame,bg="lightblue", text="FX.",width=6) b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 thread.start_new_thread(mytklib.tk_btn_bg_loop,(b,)) c,r = _draw_fx(frame,c,r,gui,mode="FX-MOVE") r+=1 b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black") b.grid(row=r, column=c, sticky=tk.W+tk.E) r+=1 c=0 c,r = _draw_fx(frame,c,r,gui,mode="FX") b = tk.Canvas(frame,bg="black", height=4,bd=0,width=6,highlightthickness=0) #,bd="black") b.grid(row=r, column=c, sticky=tk.W+tk.E) r+=1 c=0 c,r = _draw_fx(frame,c,r,gui,mode="FX-GENERIC") def draw_setup(gui,xframe,data): frame_cmd=xframe i=0 c=0 r=0 frame = tk.Frame(frame_cmd,bg="black") frame.pack(fill=tk.X, side=tk.LEFT) c+=1 pro_mode=1 if "--easy" in sys.argv: pro_mode=0 gui.setup_elem = {} comms = gui.setup_cmd # = Elem_Container() for comm in comms: if comm == "\n": c=0 r+=1 continue v=0 ok = 0 if comm == "SAVE\nSHOW": b = tk.Button(frame,bg="lightgrey", text=str(comm),width=4,height=2) myTip = Hovertip(b,'Strg + S ') ok = 1 elif comm == "LOAD\nSHOW" and pro_mode: b = tk.Button(frame,bg="lightgrey", text=str(comm),width=4,height=2) ok = 1 elif comm == "SAVE\nSHOW AS" and pro_mode: b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2) ok = 1 elif comm == "SAVE &\nRESTART": b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2) ok = 1 elif comm == "NEW\nSHOW" and pro_mode: b = tk.Button(frame,bg="lightgreen", text=str(comm),width=5,height=2) ok = 1 elif comm == "DRAW\nGUI" and pro_mode: b = tk.Button(frame,bg="lightgrey", text=str(comm),width=5,height=2) ok = 1 elif comm == "PRO\nMODE": bg="lightgrey" bg="yellow" if pro_mode: bg="green" comm = "EASY\nMODE" b = tk.Button(frame,bg=bg, text=str(comm),width=5,height=2) ok = 1 elif pro_mode: b = tk.Button(frame,bg="grey", text=str(comm),width=4,height=2) ok = 1 else: #empty b = tk.Button(frame,bg="grey", text="",width=5,height=2) if comm not in gui.commands.elem: gui.setup_elem[comm] = b #gui.setup_elem.val[comm] = 0 if ok: b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="SETUP").cb) if comm == "BASE:": b["text"] = "BASE:{}".format(prm["BASE"]) if comm: b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 if c >=17: c=0 r+=1 c+=1 r=0 def draw_live(gui,xframe,data): frame_cmd=xframe i=0 c=0 r=0 frame = tk.Frame(frame_cmd,bg="black") frame.pack(fill="both",expand=1, side="left")#tk.TOP) c+=1 for comm in ["FADE","DELAY","PAN/TILT\nFADE","PAN/TILT\nDELAY"]: if comm == "\n": c=0 r+=1 continue v=0 b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2) if comm not in gui.commands.elem: gui.commands.elem[comm] = b gui.commands.val[comm] = 0 b.bind("<Button>",Xevent(fix=0,elem=b,attr=comm,data=gui,mode="LIVE").cb) if "FADE" == comm: b["text"] = "FADE:\n{:0.2}".format(FADE.val()) if "DELAY" == comm: b["text"] = "DELAY:\n{:0.2}".format(DELAY.val()) if "PAN/TILT\nFADE" == comm: b["text"] = "PAN/TILT\nFADE:{:0.2}".format(FADE_move.val()) if "FADE" in comm: b["bg"] = "green" b.config(activebackground="lightgreen") if comm: b.grid(row=r, column=c, sticky=tk.W+tk.E) c+=1 if c >=5: c=0 r+=1