瀏覽代碼

clanup: create/recreate EXEC-BTN Window -- failed !

micha 1 年之前
父節點
當前提交
f18c7f8724
共有 3 個文件被更改,包括 110 次插入79 次删除
  1. 94 67
      _LibreLightDesk.py
  2. 15 12
      tkgui/GUI.py
  3. 1 0
      tkgui/draw.py

+ 94 - 67
_LibreLightDesk.py

@@ -296,9 +296,14 @@ def set_exec_fader(nr,val,color=""):
     try:
         exec_wing.set_fader(nr,val,color=color)
     except Exception as e:
-        print("exception",e)
+        print("- exception:",e)
     #print("remote in:",round(time.time(),0),"x",i,v)
 
+def set_exec_fader_all():
+    cprint( "set_exec_fader_all()",color="green")
+    for nr in range(10):
+        set_exec_fader(nr,0) #,color="#fff")
+
 # remote input - start (memcached)
 def JCB(x):
     for i in x:
@@ -1342,19 +1347,23 @@ def save_window_position(save_as=""):
         cprint("- fname",fname)
         f = open(fname,"w")
         for k,win in window_manager.windows.items():
-            print("-- save:win:pos",win,k)
-            if not win:
-                continue
-            #print("d",dir(win))
-            #print("winfo",k,win.tk.geometry())
-            line="{} {}\n".format(k,win.tk.geometry())
-            #print("> ",[line])
-            f.write( line )
-            f.flush()
-        f.close()
+            try:
+                print("-- save:win:pos",win,k)
+                if not win:
+                    continue
+                #print("d",dir(win))
+                #print("winfo",k,win.tk.geometry())
+                line="{} {}\n".format(k,win.tk.geometry())
+                #print("> ",[line])
+                f.write( line )
+                f.flush()
+            except Exception as e:
+                cprint("- save_window_position Exception:",e,color="red")
     except Exception as e:
         cprint("- save_window_position Exception:",e,color="red")
-        return 
+    finally:
+        f.close()
+
 
 def save_window_position_loop(): # like autosave
     def loop():
@@ -1782,7 +1791,6 @@ class Xevent():
 def wheel(event,d=None):
     print("wheel",event,d)
     
-import copy
 
 
 
@@ -3598,16 +3606,13 @@ _shift_key = 0
 
 class Window():
     def __init__(self,args): #title="title",master=0,width=100,height=100,left=None,top=None,exit=0,cb=None,resize=1):
-
-        #def __init__(self,title="title",master=0,width=100,height=100,left=None,top=None,exit=0,cb=None,resize=1):
+        global lf_nr
         self.args = {"title":"title","master":0,"width":100,"height":100,"left":None,"top":None,"exit":0,"cb":None,"resize":1}
         self.args.update(args)
-        #for k,v in args.items():
-        #    #print(k,v)
-        #    self.__setattr__(k,v)
+        
+        cprint("Window.init()",id(self.args),color="yellow")
+        cprint("  ",self.args,color="yellow")
 
-        global lf_nr
-        #ico_path="/opt/LibreLight/Xdesk/icon/"
         ico_path="./icon/"
         self.cb = cb
 
@@ -3621,7 +3626,6 @@ class Window():
             defaultFont.configure(family="FreeSans",
                                    size=10,
                                    weight="bold")
-            #self.tk.option_add("*Font", FontBold)
             # MAIN MENUE
             try:
                 self.tk.iconphoto(False, tk.PhotoImage(file=ico_path+"main.png"))
@@ -3675,7 +3679,7 @@ class Window():
             tkinter.Tk.update_idletasks(gui_menu_gui.tk)
         pass
     def close_app_win(self,event=None):
-        print("close_app_win",self,event)
+        cprint("close_app_win",self,event,color="red")
         if exit:
             if self.title == "MAIN":
                save_window_position()
@@ -3683,14 +3687,15 @@ class Window():
         try:
             self.cb("<exit>").cb()
         except Exception as e:
-            print("EXCETPION close_app",e)
+            cprint("EXCETPION: close_app_win",e,self,color="red")
 
     def title(self,title=None):
         if title is None:
             return self.tk.title()
         else:
             #return self.tk.title(title)
-            return self.tk.title(""+str(title)+" "+str(lf_nr)+":"+str(rnd_id))
+            self.args["title"] = title
+            return self.tk.title(""+str(self.args["title"])+" "+str(lf_nr)+":"+str(rnd_id))
     def show(self):
         self.tk.deiconify()
         pass
@@ -3928,10 +3933,13 @@ class Refresher():
         self.time_max = time.time()
         self.time     = time.time()
         self.update = 0
-        if self.name == "fix": # exec
-            master._refresh_fix()
-        else:
-            master._refresh_exec()
+        try:
+            if self.name == "fix": # exec
+                master._refresh_fix()
+            else:
+                master._refresh_exec()
+        except Exception as e:
+            print("_refresh except:",e)
         print("t=",self.time_max- time.time())
 
     def loop(self,args={}):
@@ -3963,7 +3971,6 @@ else:
 
 
 
-
 refresher_fix = Refresher()
 refresher_fix.name = "fix"
 
@@ -3975,32 +3982,36 @@ def loops(**args):
     thread.start_new_thread(refresher_fix.loop,())
     thread.start_new_thread(refresher_exec.loop,())
 
-def create_EXEC_WING(args={}):#name,master=0,width=600,height=415,left=0,top=0,H1=100,W1=100):
-    #w = Window(name,master=0,width=730,height=205,left=L1-80,top=TOP+H1-200)
-    #w = Window(name,master=0,width=600,height=415,left=L1,top=TOP+H1+HTB*2)
-    #w = Window(name,master=master,width=width,height=height,left=left,top=top)
-    #args = {"title":name,"master":master,"width":width,"height":height,"left":left,"top":top}
-    w = Window(args)
-    #w1 = ScrollFrame(w.tk,width=W1,height=H1)
-    w1 = tk.Frame(w.tk,width=W1,height=H1)
-    w1.pack()
-    data=[]
-    for i in range(10*3):
-        data.append({"EXEC"+str(i):"EXEC"})
-    obj=GUI_ExecWingLayout(w1,data)
-    #window_manager.new(w,name,obj)
-    return w,name,obj
-
-class create_buffer():
-    def __init__(self,cb,args={}):
-        self.args = args
-        self.cb= cb
+
+class window_create_buffer():
+    def __init__(self,args,cls,data,cb_ok=None,scroll=0,gui=None):
+        self.args   = args.copy()
+        self.cls    = cls
+        self.cb_ok  = cb_ok
+        self.data   = data
+        self.scroll = scroll
+        self.gui    = gui
+
     def create(self):
         cprint()
-        cprint(self,"create",self.args["title"],color="green")
-        w,name,obj = self.cb(args=self.args) 
-        #self.name,self.master,self.width,self.height,self.left,self.top,self.H1,self.W1)
-        return w,name,obj
+        cprint("window_create_buffer.create()",id(self),self.args["title"],color="green")
+
+        obj = None
+        w = Window(self.args)
+
+        if self.scroll:
+            w1 = ScrollFrame(w.tk,width=self.args["width"],height=self.args["height"])
+        else:
+            w1 = tk.Frame(w.tk,width=self.args["width"],height=self.args["height"])
+            w1.pack()
+
+        if self.gui:
+            self.cls(self.gui,w1,self.data) #PRESETS):
+        else:
+            obj=self.cls(w1,self.data) 
+        return w,obj,self.cb_ok
+
+window_init_buffer = {}
 
 if __run_main:
     print("main")
@@ -4043,13 +4054,23 @@ if __run_main:
 
     name="EXEC"
     args = {"title":name,"master":0,"width":W1,"height":H1,"left":L1,"top":TOP}
-    w = Window(args)
-    #w = Window(name,master=0,width=W1,height=H1,left=L1,top=TOP)
-    w1 = ScrollFrame(w.tk,width=W1,height=H1)
-    #frame_exe = w.tk
-    #draw_preset(master,w1)#w.tk)
-    draw_exec(master,w1,PRESETS)#w.tk)
-    window_manager.new(w,name)
+
+    cls   = draw_exec #GUI_ExecWingLayout
+    cb_ok = None #set_exec_fader_all
+    data  = PRESETS
+
+    c = window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,scroll=1,gui=master)
+    window_init_buffer[name] = c
+    w,obj,cb_ok = c.create()
+    window_manager.new(w,name,obj=obj)
+    if cb_ok:
+        cb_ok()
+    
+    if 0: # draw EXEC -BTN second time fail TODO
+        c = window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok,scroll=1,gui=master)
+        window_init_buffer[name] = c
+        w,obj,cb_ok = c.create()
+        window_manager.update(w,name,obj=obj)
 
     name="CONFIG"
     #w = Window(name,master=0,width=W1,height=H1,left=L1,top=TOP)
@@ -4107,12 +4128,21 @@ if __run_main:
     window_manager.new(w,name)
 
     name="EXEC-WING"
-    #create_EXEC_WING(name,master=0,width=600,height=415,left=L1,top=TOP+H1+HTB*2)
     args = {"title":name,"master":0,"width":600,"height":415,"left":L1,"top":TOP+H1+HTB*2,"H1":H1,"W1":W1}
-    c = create_buffer(create_EXEC_WING,args)#name,master=0,width=600,height=415,left=L1,top=TOP+H1+HTB*2,H1=H1,W1=W1)
-    w,name,obj = c.create()
-    create_buffer_fader_wing = c
+    data=[]
+    for i in range(10*3):
+        data.append({"EXEC"+str(i):"EXEC"})
+
+    cls   = GUI_ExecWingLayout
+    cb_ok = set_exec_fader_all
+
+    c = window_create_buffer(args=args,cls=cls,data=data,cb_ok=cb_ok)
+    window_init_buffer[name] = c
+    w,obj,cb_ok = c.create()
     window_manager.new(w,name,obj)
+    if cb_ok:
+        cb_ok()
+
 
     name="ENCODER"
     #w = Window(name,master=0,width=620,height=113,left=L0+710,top=TOP+H1+15+HTB*2)
@@ -4211,9 +4241,6 @@ if __run_main:
     window_manager.new(w,name)
 
 
-    #Set EXEC-FADER SIZE TO 0 on Startup
-    for nr in range(10):
-        set_exec_fader(nr,0) #,color="#fff")
 
     load_window_position()
 

+ 15 - 12
tkgui/GUI.py

@@ -1300,7 +1300,7 @@ class GUI_MasterWingLayout():
             txt = data["Value"]
             print(self,"._cb()",txt)
             self.name["text"] = "{}".format(txt)
-            print("change_dmx",[_event,self])
+            print("set_name",[_event,self])
         dialog._cb = _cb
         dialog.askstring("FIXTURE NAME:","NAME:",initialvalue=txt)
 
@@ -1310,7 +1310,7 @@ class GUI_MasterWingLayout():
         
     def _event_redraw(self,_event=None):
         nr = 0
-        print("change_dmx",[_event,self])
+        print("_event_redraw",[_event,self])
         for i,btn in enumerate(self.elem):
             btn.set_label("{} D:{}".format(i+1,nr))
             btn.nr = nr+i
@@ -1393,16 +1393,19 @@ class WindowManager():
                 self.windows[name].tk.state(newstate='normal')
             except Exception as e:
                 cprint("exception",e,color="red")
-                cprint(name,self.windows[name])
-
-                c = m.create_buffer_fader_wing 
-                w,_name,obj = c.create()
-                print("recreate",w,name,_name,r,obj)
-                m.window_manager.update(w,name,obj)
-
-                cprint("reposition",name)
-                m.load_window_position(_filter=name)
-                #m.window_manager.new(w,name,obj)
+                cprint("info",name,self.windows[name],color="red")
+
+                #c = m.create_buffer_fader_wing 
+                print( name in m.window_init_buffer)
+                print( m.window_init_buffer)
+                if name in m.window_init_buffer:
+                    c = m.window_init_buffer[name] 
+                    w,obj,cb_ok = c.create()
+                    m.window_manager.update(w,name,obj)
+
+                    if cb_ok:
+                        cb_ok()
+                    m.load_window_position(_filter=name)
 
             self.windows[name].tk.attributes('-topmost',True)
             self.windows[name].tk.attributes('-topmost',False)

+ 1 - 0
tkgui/draw.py

@@ -110,6 +110,7 @@ class ExecButton(MiniButton):
             self.text = text
         else:
             text = self.text
+
         self.bb.delete("label")
         txt2 = text
         try: