EXEC.py 5.3 KB

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