EXEC.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. import json
  2. import time
  3. import sys
  4. import tkinter as tk
  5. import traceback
  6. import _thread as thread
  7. import dialog
  8. DIALOG = dialog.Dialog()
  9. #d = dialog.Dialog()
  10. #d.ask_exec_config(str(nr+1),button=button,label=label,cfg=cfg)
  11. import __main__ as MAIN
  12. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  13. INIT_OK = 1
  14. IS_GUI = 0
  15. from lib.cprint import cprint
  16. import tkgui.draw as draw
  17. import lib.libtk as libtk
  18. import lib.zchat as chat
  19. root = None
  20. cmd_client = chat.Client(port=30003)
  21. try:
  22. import memcache
  23. mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  24. except:
  25. mc = None
  26. class Refresher():
  27. def __init__(self,*arg,**args):
  28. print(self,"__init__",arg,args)
  29. def reset(*arg,**args):
  30. print(self,"reset",arg,args)
  31. class MASTER():
  32. def __init__(self,*arg,**args):
  33. print(self,"__init__",arg,args)
  34. #self.refresh_fix = Refresher()
  35. def refresh_fix(self,*arg,**args):# = Refresher()
  36. print(self,"refresh_fix",arg,args)
  37. def refresh_fix(*arg,**args):
  38. print("refresh_fix",arg,args)
  39. class Refresher_fix():
  40. def __init__(self,*arg,**args):
  41. print(self,"init",arg,args)
  42. def reset(self,*arg,**args):
  43. print(self,"reset",arg,args)
  44. refresher_fix = Refresher_fix()
  45. class Modes():
  46. def __init__(self,*arg,**args):
  47. print("Modes.__init__",arg,args)
  48. self.modes = {}
  49. def val(self,*arg,**args):
  50. print("Modes.val",arg,args)
  51. master = MASTER() #{}
  52. modes = Modes()
  53. import tkinter as tk
  54. class Exec():
  55. def __init__(self):
  56. self.val_exec = {}
  57. for i in range(512):
  58. k=i #"ABC-{}".format(i+1)
  59. self.val_exec[k] = {"NAME":"XX"}
  60. EXEC = Exec()
  61. class Gui():
  62. def __init__(self):
  63. self.elem_exec = []
  64. self.elem_meta = [None]*512
  65. def _refresh_exec(self,*arg,**args):
  66. print("Gui._refresh_exec",arg,args)
  67. nr = 14-1
  68. METAS = []
  69. for i in range(512):
  70. nr = i #+1
  71. try:
  72. data = mc.get("EXEC-META-"+str(nr)) #,json.dumps(index))
  73. data = json.loads(data)
  74. METAS.append(data)
  75. except Exception as e:
  76. print(" ER1R mc...",e)
  77. for nr,b in enumerate( self.elem_exec): #[nr]
  78. _bg = "grey"
  79. _ba = "grey"
  80. _bg = "grey"
  81. _fg = "#555" #darkgrey"
  82. _text = "0 N/V 0\n N/V"
  83. txt = "None/nNone"
  84. txt1 = "None/nNone"
  85. out = {} # default
  86. out["fx"] = ""
  87. out["bg"] = _bg # "grey"
  88. out["ba"] = _ba #"grey"
  89. out["fg"] = _fg
  90. out["text"] = _text #"? "+str(nr+1)
  91. META = {'LABEL': 'ERR', 'LEN': 2, 'CFG': {}}
  92. META["CFG"] = {'FADE': 3.0, 'DEALY': 0, 'DELAY': 4.0, 'BUTTON': 'ON', 'HTP-MASTER': 100, 'SIZE-MASTER': 100, 'SPEED-MASTER': 100, 'OFFSET-MASTER': 100, 'OUT-FADE': 10.0}
  93. try:
  94. META = METAS[nr]
  95. label = "{} {} {}\n{}".format(nr+1,META["CFG"]["BUTTON"],META["LEN"],META["LABEL"])
  96. out["text"] = str(label)
  97. LEN = META["LEN"] #int(label.split("\n")[0].split()[-1])
  98. if LEN: # >= 3:
  99. _bg = "orange" #yellow"
  100. _fg = "black" #grey"
  101. except Exception as e:
  102. print(" ER4R",e,nr)
  103. time.sleep(0.001)
  104. try:
  105. txt1 = META["CFG"]["BUTTON"]
  106. except:
  107. pass
  108. if META["LEN"]:
  109. _fg = "black"
  110. _bg = "gold"
  111. _ba = "#ffaa55"
  112. if "SEL" in txt1:
  113. #_bg = "blue"
  114. #_fg = "blue"
  115. _bg = "#77f"
  116. elif "ON" in txt1:
  117. _fg = "#040"
  118. _fg = "black"
  119. elif "GO" in txt1:
  120. _fg = "#555"
  121. _fg = "black"
  122. if META["CFG"]["HAVE-FX"] >= 1 and META["CFG"]["HAVE-VAL"] == 0:
  123. _bg = "cyan"
  124. if "FL" in txt1:
  125. _fg = "#00e"
  126. out["fg"] = _fg #= "#00e"
  127. out["bg"] = _bg #= "#00e"
  128. cfg = out
  129. self.elem_meta[nr] = META
  130. b = self.elem_exec[nr]
  131. b.configure(fg=cfg["fg"],bg=cfg["bg"],activebackground=cfg["ba"],text=cfg["text"],fx=cfg["fx"])
  132. def exec_go(self,*arg,**args):
  133. print("Gui.exec_go",arg,args)
  134. #print(" ",dir(arg))
  135. #print(" ",self)
  136. btn_nr = arg[0]
  137. v=args["val"]
  138. if "CFG-BTN" in modes.modes:
  139. button = self.elem_exec[btn_nr]
  140. label = str(btn_nr) #self.elem_meta[nr] = META
  141. if v:
  142. cfg = self.elem_meta[btn_nr]
  143. DIALOG.ask_exec_config(str(btn_nr+1),button=button,label=label,cfg=cfg)
  144. return
  145. msg=json.dumps([{"event":"EXEC","EXEC":btn_nr,"VAL":v,"NR-KEY":btn_nr}]).encode("utf-8")
  146. print("SPCIAL-KEY",msg)
  147. cmd_client.send(msg)
  148. gui = Gui()
  149. #import memcache
  150. #mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  151. #import time
  152. #while 1:
  153. # x=mc.get("MODE")
  154. # print(x)
  155. # time.sleep(1)
  156. root = tk.Tk()
  157. #root.withdraw() # do not draw
  158. #root.resizable(1,1)
  159. root.tk_setPalette(background='#bbb', foreground='black', activeBackground='#aaa', activeForeground="black")
  160. defaultFont = tk.font.nametofont("TkDefaultFont")
  161. #cprint(defaultFont)
  162. defaultFont.configure(family="FreeSans",
  163. size=10,
  164. weight="bold")
  165. # MAIN MENUE
  166. #try:
  167. # self.tk.iconphoto(False, tk.PhotoImage(file=ico_path+"main.png"))
  168. #except Exception as e:
  169. # print(" Exception GUIWindowContainer.__init__",e)
  170. #xframe=root
  171. xframe = libtk.ScrollFrame(root,width=820,height=400,bd=1,bg="black",head=None,foot=None)
  172. draw.draw_exec(gui,xframe,EXEC)
  173. #xframe.pack()
  174. root.title("DEMO TK-EXEC 2")
  175. def _refr_loop():
  176. time.sleep(3)
  177. while 1:
  178. gui._refresh_exec()
  179. time.sleep(3)
  180. thread.start_new_thread(_refr_loop,())
  181. def _refr_loop2():
  182. time.sleep(3)
  183. while 1:
  184. try:
  185. global root
  186. title = "DEMO TK-EXEC"
  187. data = mc.get("MODES")
  188. title += " "+str(data)
  189. data = json.loads(data)
  190. #print("MODES",data)
  191. modes.modes = data
  192. if root:
  193. root.title(title)
  194. except Exception as e:
  195. print(" ER7R mc...",e)
  196. time.sleep(3)
  197. time.sleep(0.5)
  198. thread.start_new_thread(_refr_loop2,())
  199. root.mainloop()