FX3.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. #!/usr/bin/python3
  2. import json
  3. import time
  4. import sys
  5. import os
  6. import tkinter as tk
  7. import traceback
  8. import _thread as thread
  9. sys.path.insert(0,"/opt/LibreLight/Xdesk/")
  10. gui=None
  11. INIT_OK = 1
  12. IS_GUI = 0
  13. import __main__ as MAIN
  14. import lib.meta as meta
  15. import tool.git as git
  16. CAPTION = "FX3"
  17. title = CAPTION
  18. title += git.get_all()
  19. from lib.cprint import cprint
  20. import lib.libtk as libtk
  21. import lib.libtk2 as libtk2
  22. import lib.zchat as chat
  23. import lib.mytklib as mytklib
  24. import lib.tkevent as tkevent
  25. #import tkgui.draw as draw
  26. import tool.movewin as movewin
  27. movewin.check_is_started("FX3","/opt/LibreLight/Xdesk/tkgui/FX3.py")
  28. def _add_space(frame,r,c):
  29. b = tk.Canvas(frame,bg="black", height=2,bd=0,width=6,highlightthickness=0) #,bd="black")
  30. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  31. r+=1
  32. c=0
  33. return r,c
  34. def basic():
  35. for i in range(4):
  36. k = "GRP:1" #.format(i+1)
  37. MAIN.meta.fx3_grid[k].val("POS")
  38. k = "ATTR:1" #.format(i+1)
  39. MAIN.meta.fx3_grid[k].val("-")
  40. k = "ATTR:2" #.format(i+1)
  41. MAIN.meta.fx3_grid[k].val("-")
  42. k = "ATTR:3" #.format(i+1)
  43. MAIN.meta.fx3_grid[k].val("-")
  44. k = "ATTR:4" #.format(i+1)
  45. MAIN.meta.fx3_grid[k].val("-")
  46. k = "SIZE:{}".format(i+1)
  47. MAIN.meta.fx3_grid[k].val(255)
  48. MAIN.meta.fx3_grid[k].data["init_value"] = 255
  49. MAIN.meta.fx3_grid[k].data["max"] = 512
  50. MAIN.meta.fx3_grid[k].data["cycle"] = [0,127,255]
  51. k = "SPEED:{}".format(i+1)
  52. MAIN.meta.fx3_grid[k].val(10)
  53. MAIN.meta.fx3_grid[k].data["init_value"] = 10
  54. MAIN.meta.fx3_grid[k].data["max"] = 255
  55. MAIN.meta.fx3_grid[k].data["cycle"] = [0,5,25,30,100,255]
  56. k = "OFFSET:{}".format(i+1)
  57. MAIN.meta.fx3_grid[k].val(100)
  58. MAIN.meta.fx3_grid[k].data["init_value"] = 100
  59. MAIN.meta.fx3_grid[k].data["inc"] = 25
  60. k = "WIDTH:{}".format(i+1)
  61. MAIN.meta.fx3_grid[k].val(25)
  62. MAIN.meta.fx3_grid[k].data["init_value"] = 25
  63. MAIN.meta.fx3_grid[k].data["max"] = 100
  64. MAIN.meta.fx3_grid[k].data["inc"] = 5
  65. k = "START:{}".format(i+1)
  66. MAIN.meta.fx3_grid[k].val(0)
  67. MAIN.meta.fx3_grid[k].data["init_value"] = 0
  68. MAIN.meta.fx3_grid[k].data["max"] = 255
  69. MAIN.meta.fx3_grid[k].data["inc"] = 5
  70. k = "SHUFFLE:{}".format(i+1)
  71. MAIN.meta.fx3_grid[k].val(0)
  72. MAIN.meta.fx3_grid[k].data["init_value"] = 0
  73. MAIN.meta.fx3_grid[k].data["max"] = 2
  74. k = "DIR:{}".format(i+1)
  75. MAIN.meta.fx3_grid[k].val(1)
  76. MAIN.meta.fx3_grid[k].data["init_value"] = 1
  77. MAIN.meta.fx3_grid[k].data["max"] = 0
  78. k = "INVERT:{}".format(i+1)
  79. MAIN.meta.fx3_grid[k].val(1)
  80. MAIN.meta.fx3_grid[k].data["init_value"] = 1
  81. MAIN.meta.fx3_grid[k].data["max"] = 1
  82. basic()
  83. def motion(code="circle"):
  84. #basic()
  85. k = "GRP:1" #.format(i+1)
  86. MAIN.meta.fx3_grid[k].val("POS")
  87. MAIN.meta.change_grp(name=k,val="POS")
  88. k = "GRP:2" #.format(i+1)
  89. MAIN.meta.fx3_grid[k].val("POS")
  90. MAIN.meta.change_grp(name=k,val="POS")
  91. k = "GRP:3" #.format(i+1)
  92. MAIN.meta.fx3_grid[k].val(" ")
  93. MAIN.meta.change_grp(name=k,val=" ")
  94. k = "ATTR:1" #.format(i+1)
  95. MAIN.meta.fx3_grid[k].val("PAN")
  96. k = "ATTR:2" #.format(i+1)
  97. MAIN.meta.fx3_grid[k].val("TILT")
  98. k = "ATTR:3" #.format(i+1)
  99. MAIN.meta.fx3_grid[k].val(" ")
  100. if code == "circle":
  101. k = "TYPE:1"
  102. MAIN.meta.fx3_grid[k].val("SIN")
  103. k = "TYPE:2"
  104. MAIN.meta.fx3_grid[k].val("COS")
  105. if code == "pan":
  106. k = "TYPE:1"
  107. MAIN.meta.fx3_grid[k].val("SIN")
  108. k = "TYPE:2"
  109. MAIN.meta.fx3_grid[k].val("-")
  110. if code == "tilt":
  111. k = "TYPE:1"
  112. MAIN.meta.fx3_grid[k].val("-")
  113. k = "TYPE:2"
  114. MAIN.meta.fx3_grid[k].val("COS")
  115. def size(val=255):
  116. for i in range(4):
  117. k = "SIZE:{}".format(i+1)
  118. print(" ",k,val)
  119. MAIN.meta.fx3_grid[k].val(val)
  120. __refresh_fx3(_filter="SIZE")
  121. def speed(val=255):
  122. for i in range(4):
  123. k = "SPEED:{}".format(i+1)
  124. print(" ",k,val)
  125. MAIN.meta.fx3_grid[k].val(val)
  126. __refresh_fx3(_filter="SPEED")
  127. def rgb(code="red"):
  128. #basic()
  129. k = "GRP:1"
  130. MAIN.meta.change_grp(name=k,val="RGB")
  131. MAIN.meta.fx3_grid[k].val("RGB")
  132. k = "GRP:2"
  133. MAIN.meta.change_grp(name=k,val="RGB")
  134. MAIN.meta.fx3_grid[k].val("RGB")
  135. k = "GRP:3"
  136. MAIN.meta.change_grp(name=k,val="RGB")
  137. MAIN.meta.fx3_grid[k].val("RGB")
  138. k = "ATTR:1"
  139. MAIN.meta.fx3_grid[k].val("RED")
  140. k = "ATTR:2"
  141. MAIN.meta.fx3_grid[k].val("GREEN")
  142. k = "ATTR:3"
  143. MAIN.meta.fx3_grid[k].val("BLUE")
  144. k = "TYPE:1"
  145. MAIN.meta.fx3_grid[k].val("255")
  146. k = "TYPE:2"
  147. MAIN.meta.fx3_grid[k].val("255")
  148. k = "TYPE:3"
  149. MAIN.meta.fx3_grid[k].val("255")
  150. k = "TYPE:4"
  151. MAIN.meta.fx3_grid[k].val("255")
  152. if code == "red":
  153. k = "TYPE:1"
  154. MAIN.meta.fx3_grid[k].val("FD")
  155. if code == "green":
  156. k = "TYPE:2"
  157. MAIN.meta.fx3_grid[k].val("FD")
  158. if code == "blue":
  159. k = "TYPE:3"
  160. MAIN.meta.fx3_grid[k].val("FD")
  161. if code == "blue":
  162. k = "TYPE:3"
  163. MAIN.meta.fx3_grid[k].val("FD")
  164. if code == "blue":
  165. k = "TYPE:3"
  166. MAIN.meta.fx3_grid[k].val("FD")
  167. __refresh_fx3()
  168. def clear():
  169. basic()
  170. k = "GRP:1"
  171. MAIN.meta.fx3_grid[k].val(" ")
  172. k = "GRP:2"
  173. MAIN.meta.fx3_grid[k].val(" ")
  174. k = "GRP:3"
  175. MAIN.meta.fx3_grid[k].val(" ")
  176. k = "ATTR:1"
  177. MAIN.meta.fx3_grid[k].val(" ")
  178. k = "ATTR:2"
  179. MAIN.meta.fx3_grid[k].val(" ")
  180. k = "ATTR:3"
  181. MAIN.meta.fx3_grid[k].val(" ")
  182. k = "TYPE:1"
  183. MAIN.meta.fx3_grid[k].val(" ")
  184. k = "TYPE:2"
  185. MAIN.meta.fx3_grid[k].val(" ")
  186. k = "TYPE:3"
  187. MAIN.meta.fx3_grid[k].val(" ")
  188. motion("circle")
  189. def _refresh_fx3x(): #frame,c,r,gui,mode="FX"):
  190. time.sleep(5)
  191. while 1:
  192. print("Ö " *22)
  193. motion("circle")
  194. time.sleep(3)
  195. rgb()
  196. time.sleep(3)
  197. clear()
  198. time.sleep(3)
  199. print("Ö " *22)
  200. break
  201. def __refresh_fx3(_filter=""):
  202. ct = MAIN.meta.fx3 #moves
  203. prm = MAIN.meta.fx3_prm
  204. for comm in ct.labels:
  205. if comm not in ct.elem:
  206. continue
  207. b = ct.elem[comm]
  208. if comm in MAIN.meta.fx3_grid:
  209. if _filter and _filter != comm:
  210. continue
  211. #MAIN.meta.fx3_grid[comm].val("X")
  212. v2 = MAIN.meta.fx3_grid[comm].val()
  213. v1 = b["text"]
  214. #if "ATTR" in comm or "GRP" in comm:
  215. # print([comm,v1,v2,b])
  216. if "ATTR" in comm:
  217. pass #MAIN.meta.fx3_grid[comm].val("PAN")
  218. #print(MAIN.meta.fx3_grid[comm].data)
  219. v2 = MAIN.meta.fx3_grid[comm].val()
  220. v1 = b["text"]
  221. if "ATTR" in comm or "GRP" in comm:
  222. print([comm,v1,v2,b])
  223. if str(v2) != str(v1):
  224. print(" change")
  225. #print([comm,b,v1,v2])
  226. b["text"] = str(v2)
  227. def _refresh_fx3(): #frame,c,r,gui,mode="FX"):
  228. while 1:
  229. __refresh_fx3()
  230. time.sleep(2)
  231. def _draw_fx3(frame,c,r,gui,mode="FX"):
  232. ct = MAIN.meta.fx3 #moves
  233. prm = MAIN.meta.fx3_prm
  234. for comm in ct.labels:
  235. print(" draw3",comm)
  236. if comm == "\n\n":
  237. b = tk.Label(frame,bg="black", text="-",font=space_font)
  238. b.grid(row=r, column=c,pady=0,padx=0, sticky=tk.W+tk.E)
  239. c=0
  240. r+=1
  241. continue
  242. if comm == "\n":
  243. c=0
  244. r+=1
  245. continue
  246. v=0
  247. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=1)
  248. ct.elem[comm] = b
  249. ct.val[comm] = 0
  250. def _XXX(xcb,xcomm,xb):
  251. def XXX(event=None,**data):
  252. print("BTN:",xb["text"],xcomm)
  253. print("xXx "*22)
  254. print("XXX",event,data)
  255. if xcomm == "CIRCLE":
  256. motion("circle")
  257. elif xcomm == "PAN":
  258. motion("pan")
  259. elif xcomm == "TILT":
  260. motion("tilt")
  261. elif xcomm == "RED":
  262. rgb("red")
  263. elif xcomm == "GREEN":
  264. rgb("green")
  265. elif xcomm == "BLUE":
  266. rgb("blue")
  267. elif xcomm == "MINI":
  268. size(10)
  269. elif xcomm == "SMALL":
  270. size(25)
  271. elif xcomm == "NORMAL":
  272. size(50)
  273. elif xcomm == "BIG":
  274. size(100)
  275. elif xcomm == "SLOW":
  276. speed(5)
  277. elif xcomm == "MID":
  278. speed(25)
  279. elif xcomm == "FAST":
  280. speed(100)
  281. elif xcomm == "TURBO":
  282. speed(200)
  283. xcb(event) #,data)
  284. return XXX
  285. _cb = tkevent.tk_event_fx(fix=0,elem=b,attr=comm,data=gui,mode=mode).cb
  286. _comm = comm
  287. _b = b
  288. XXX = _XXX(_cb,_comm,_b)
  289. b.bind("<Button>",XXX)
  290. #b.bind("<Button>",tkevent.tk_event_fx(fix=0,elem=b,attr=comm,data=gui,mode=mode).cb)
  291. if comm == "xREC-FX":
  292. b["bg"] = "grey"
  293. elif comm == "xFX OFF":
  294. b["bg"] = "magenta"
  295. elif comm[:3] == "xFX:" or comm[:3] == "x2D:":
  296. b["text"] = comm
  297. b["bg"] = "#ffbf00"
  298. if comm == "START":
  299. b["bg"] = "orange"
  300. b.config(activebackground="#dd0")
  301. if comm in MAIN.meta.fx3_grid:
  302. fx_func = MAIN.meta.fx3_grid[comm]
  303. fx_func.data["wrap"] = 1
  304. #fx_func.inc()
  305. v=fx_func.val()
  306. print("3>",[comm,fx_func,v])
  307. b["text"] = v
  308. if comm.startswith("TYPE:"):
  309. b["bg"] = "orange"
  310. b.config(activebackground="#dd0")
  311. for a in ["SPEED:","SIZE:","START:","OFFSET:"]:
  312. if comm.startswith(a):
  313. b["bg"] = "lightgreen"
  314. b.config(activebackground="#0d0")
  315. if comm:
  316. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  317. c+=1
  318. if c >=6:
  319. c=0
  320. r+=1
  321. c=0
  322. r+=1
  323. return c,r
  324. def _draw_fx(frame,c,r,gui,mode="FX"):
  325. ct = None
  326. prm = None
  327. if mode=="FX-MAIN":
  328. ct = MAIN.meta.fx_main
  329. prm = MAIN.meta.fx_prm_main
  330. print("-- draw")
  331. for comm in ct.labels:
  332. print(" draw",comm)
  333. if comm == "\n\n":
  334. b = tk.Label(frame,bg="black", text="-",font=space_font)
  335. b.grid(row=r, column=c,pady=0,padx=0, sticky=tk.W+tk.E)
  336. c=0
  337. r+=1
  338. continue
  339. if comm == "\n":
  340. c=0
  341. r+=1
  342. continue
  343. v=0
  344. b = tk.Button(frame,bg="lightgrey", text=str(comm),width=6,height=2)
  345. ct.elem[comm] = b
  346. ct.val[comm] = 0
  347. b.bind("<Button>",tkevent.tk_event_fx(fix=0,elem=b,attr=comm,data=gui,mode=mode).cb)
  348. if comm == "REC-FX":
  349. b["bg"] = "grey"
  350. elif comm == "FX OFF":
  351. b["bg"] = "magenta"
  352. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  353. c+=1
  354. if c >=6:
  355. c=0
  356. r+=1
  357. c=0
  358. r+=1
  359. return c,r
  360. def draw_fx3(gui,xframe):
  361. frame_fx=xframe
  362. i=0
  363. c=0
  364. r=0
  365. frame = tk.Frame(frame_fx,bg="black")
  366. frame.pack(fill=tk.X, side=tk.TOP)
  367. # ------------------------------
  368. b = tk.Button(frame,bg="lightblue", text="FX3",width=6)
  369. b.grid(row=r, column=c, sticky=tk.W+tk.E)
  370. c+=1
  371. _add_space(frame,r,c)
  372. c,r = _draw_fx(frame,c,r,gui,mode="FX-MAIN")
  373. r,c=_add_space(frame,r,c)
  374. c,r = _draw_fx3(frame,c,r,gui,mode="FX-3")
  375. _global_short_key = 1
  376. root = None
  377. cmd_client = chat.Client(port=30003)
  378. try:
  379. import memcache
  380. mc = memcache.Client(['127.0.0.1:11211'], debug=0)
  381. #data = mc.get("MODES")
  382. except:
  383. mc = None
  384. class MANAGER_X(): # DUMMY
  385. def __init__(self,*arg,**args):
  386. print(self,"__init__",arg,args)
  387. def send(self,nr,*arg,**args): #val=None,xfade=None,event=None,button="",ptfade=None):
  388. if _global_key_lock:
  389. return
  390. print(self,"MASTER",nr,arg,args)
  391. btn_nr = nr
  392. v = args["val"]
  393. msg=json.dumps([{"event":"EXEC","EXEC":btn_nr+1,"VAL":v,"NR-KEY":btn_nr}]).encode("utf-8")
  394. msg=json.dumps([{"event":"XXX","YYY":1,"VAL":12}]).encode("utf-8")
  395. cprint("SEND MASTER._GO:",msg,color="green")
  396. cmd_client.send(msg)
  397. import lib.manager as manager
  398. master = manager.MANAGER() #{}
  399. class Modes(): # DUMMY
  400. def __init__(self,*arg,**args):
  401. print("Modes.__init__",arg,args)
  402. self.modes = {}
  403. def val(self,*arg,**args):
  404. #print("Modes.val",arg,args)
  405. pass
  406. class Gui(): # DUMMY
  407. def __init__(self):
  408. self.elem_exec = []
  409. self.elem_meta = [None]*512
  410. self.old_btn_nr = -1
  411. self.METAS = []
  412. for i in range(512):
  413. self.METAS.append({})
  414. def _load_meta(self,nr):
  415. data = {}
  416. try:
  417. data = mc.get("EXEC-META-"+str(nr))
  418. data = json.loads(data)
  419. except Exception as e:
  420. print(" ER1R mc...",e)
  421. return data
  422. def _refresh_data(self,*arg,**args):
  423. start = time.time()
  424. METAS = []
  425. for i in range(512):
  426. nr = i #+1
  427. METAS.append( self._load_meta(nr) )
  428. self.METAS = METAS
  429. for nr,b in enumerate( self.elem_exec): #[nr]
  430. self._refresh_data_single(nr,b,METAS)
  431. print(__file__.split("/")[-1], "_refresh_data:",int((time.time()-start)*10)/10 )
  432. def _refresh_data_single(self,nr,b,METAS=None):
  433. start = time.time()
  434. no_meta = 0
  435. if not METAS:
  436. no_meta = 1
  437. try:
  438. data = mc.get("EXEC-META-"+str(nr)) #,json.dumps(index))
  439. data = json.loads(data)
  440. self.METAS[nr] = data #.append(data)
  441. #print(time.time())
  442. print(" _REFRESH_EXEC_SINGLE",nr,b,data["LABEL"])
  443. except Exception as e:
  444. print(" ER1R mc...",e)
  445. METAS = self.METAS
  446. #manager = MANAGER()
  447. #master = MANAGER()
  448. modes = Modes()
  449. gui = Gui()
  450. root = tk.Tk()
  451. root.maxsize(600,800)
  452. win_title="FX3"
  453. store = movewin.load_all_sdl(win_title)
  454. print(store)
  455. W=380
  456. H=550
  457. POS=[800,200]
  458. if store:
  459. W = store[-4]
  460. H = store[-3]
  461. POS=[store[-2],store[-1]]
  462. root.geometry('%dx%d+%d+%d' % (W, H, POS[0],POS[1]))
  463. root.tk_setPalette(background='#bbb', foreground='black', activeBackground='#aaa', activeForeground="black")
  464. defaultFont = tk.font.nametofont("TkDefaultFont")
  465. defaultFont.configure(family="FreeSans", size=10, weight="bold")
  466. # MAIN MENUE
  467. try:
  468. ico_path = "/opt/LibreLight/Xdesk/icon/"
  469. root.iconphoto(False, tk.PhotoImage(file=ico_path+"scribble.png"))
  470. except Exception as e:
  471. print(" Exception GUIWindowContainer.__init__",e)
  472. xframe = libtk.ScrollFrame(root,width=820,height=400,bd=1,bg="black",head=None,foot=None)
  473. draw_fx3(gui,xframe)
  474. root.title(title)
  475. root.bind("<Button>",libtk2.tk_event)#
  476. root.bind("<Key>",libtk2.tk_event)#,self.callback)
  477. root.bind("<KeyRelease>",libtk2.tk_event)#,self.callback)
  478. #root.bind("<FocusIn>",libtk2.tk_event)#, on_focus(self.args["title"],"In").cb)
  479. #root.bind("<FocusOut>",libtk2.tk_event)#, on_focus(self.args["title"],"Out").cb)
  480. _global_key_lock = 0
  481. def focus_in(event=None):
  482. _global_short_key = 0 # protect key-press-repeat
  483. cmd = "xset -display :0.0 r off"
  484. print("FOCUS_IN1", cmd)
  485. os.system(cmd)
  486. time.sleep(0.3)
  487. print("FOCUS_IN2", cmd)
  488. os.system(cmd)
  489. _global_short_key = 1 # protect key-press-repeat
  490. time.sleep(0.3)
  491. _global_key_lock = 0
  492. def focus_out(event=None):
  493. _global_key_lock = 1
  494. _global_short_key = 0
  495. cmd="xset -display :0.0 r rate 240 20"
  496. print("FOCUS_OUT", cmd)
  497. #os.system(cmd) # DISABLED
  498. root.bind("<FocusIn>", focus_in)
  499. root.bind("<FocusOut>", focus_out)
  500. def _refr_loop():
  501. time.sleep(3)
  502. while 1:
  503. try:
  504. gui._refresh_data()
  505. time.sleep(3)
  506. except Exception as e:
  507. print(" ER5R refr_loop()...",e)
  508. time.sleep(3)
  509. time.sleep(0.1)
  510. def _refr_loop2():
  511. time.sleep(3)
  512. while 1:
  513. try:
  514. global root,title
  515. data = mc.get("MODES")
  516. title2 = title +" "+str(data)
  517. data = json.loads(data)
  518. #print("MODES",data)
  519. modes.modes = data
  520. if root:
  521. root.title(title2)
  522. if "S-KEY" in data:
  523. _global_short_key = 0
  524. if data["S-KEY"]:
  525. _global_short_key = 1
  526. for k in data:
  527. #print("title",k)
  528. for kk in ["RESTART","PRO","EASY","EXIT"]:
  529. if kk in str(k):
  530. print("RESTART !!! EXIT !!")
  531. time.sleep(0.1)
  532. root.quit()
  533. #sys.exit()
  534. fx3_line = {}
  535. for comm,v in MAIN.meta.fx3_grid.items():
  536. #print(":",comm,v.val())
  537. if comm.startswith("ATTR:"):
  538. fx3_line[comm] = 1
  539. except Exception as e:
  540. print(" ER7R mc...",e)
  541. time.sleep(3)
  542. time.sleep(0.1)
  543. thread.start_new_thread(_refr_loop,())
  544. thread.start_new_thread(_refr_loop2,())
  545. thread.start_new_thread(_refresh_fx3,())
  546. #thread.start_new_thread(_refresh_fx3x,())
  547. root.mainloop()