|
@@ -0,0 +1,154 @@
|
|
|
+#!/usr/bin/python3
|
|
|
+
|
|
|
+import _thread as thread
|
|
|
+import time
|
|
|
+import copy
|
|
|
+
|
|
|
+from collections import OrderedDict
|
|
|
+
|
|
|
+import tkinter
|
|
|
+tk = tkinter
|
|
|
+
|
|
|
+from idlelib.tooltip import Hovertip
|
|
|
+
|
|
|
+import tkgui.dialog as dialoglib
|
|
|
+dialog = dialoglib.Dialog()
|
|
|
+
|
|
|
+import __main__ as MAIN
|
|
|
+
|
|
|
+from lib.cprint import *
|
|
|
+
|
|
|
+
|
|
|
+import lib.mytklib as mytklib
|
|
|
+import lib.fixlib as fixlib
|
|
|
+import lib.showlib as showlib
|
|
|
+import lib.libtk as libtk
|
|
|
+import lib.tkevent as tkevent
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class BEvent():
|
|
|
+ def __init__(self,data,cb):
|
|
|
+ self._data = data
|
|
|
+ self._cb = cb
|
|
|
+ def cb(self,event):
|
|
|
+ #print(self,event)
|
|
|
+ self._cb(event,self._data)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class GUI_menu():
|
|
|
+ def __init__(self,root,frame ,data,title="tilte"):
|
|
|
+ global tk
|
|
|
+ global INIT_OK
|
|
|
+ self.frame = frame
|
|
|
+ self.data = data
|
|
|
+ self.elem = {}
|
|
|
+ self.root = root
|
|
|
+ self.draw()
|
|
|
+
|
|
|
+ def draw(self):
|
|
|
+ cprint("***",self,"draw")
|
|
|
+ r=0
|
|
|
+ c=0
|
|
|
+ i=1
|
|
|
+ self.b = tk.Label(self.frame,bg="lightblue", text="MAIN:MENU",width=8,height=1)
|
|
|
+ self.TITLE = self.b
|
|
|
+ self.b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
|
|
|
+ BUF = []
|
|
|
+ for j in range(3):
|
|
|
+ BUF.append([""]*40)
|
|
|
+ print(BUF)
|
|
|
+ r=0
|
|
|
+ h = 2
|
|
|
+ for row in self.data:
|
|
|
+ print(" draw",row)
|
|
|
+ text="<TXT>"
|
|
|
+
|
|
|
+ #row = data[i]
|
|
|
+ if row["text"] == "---":
|
|
|
+ h=1
|
|
|
+
|
|
|
+ if "name" in row:
|
|
|
+ text = row["name"]
|
|
|
+ else:
|
|
|
+ text = row["text"]
|
|
|
+
|
|
|
+ if "- DEMO -" == text:
|
|
|
+ c=2
|
|
|
+ r=1
|
|
|
+ b = tk.Button(self.frame,bg="lightgrey", text=text,width=8,height=h)
|
|
|
+ self.b = b
|
|
|
+
|
|
|
+ if "tip" in row:
|
|
|
+ from idlelib.tooltip import Hovertip
|
|
|
+ myTip = Hovertip(self.b,row["tip"])
|
|
|
+
|
|
|
+ self.b.bind("<Button>",BEvent({"NR":i,"text":row["text"]},self.on_top).cb)
|
|
|
+ BUF[c][r] = b
|
|
|
+ #self.b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
|
|
|
+ row["elem"] = self.b
|
|
|
+ self.elem[row["text"]] = row
|
|
|
+
|
|
|
+ r+=1
|
|
|
+ i+=1
|
|
|
+
|
|
|
+ r=1
|
|
|
+ c=0
|
|
|
+ for rows in BUF:
|
|
|
+ h=2
|
|
|
+ for b in rows:
|
|
|
+ #print("b",type(b))
|
|
|
+ text=""
|
|
|
+ if r > 6:
|
|
|
+ h=1
|
|
|
+ if type(b) is str:
|
|
|
+ b = tk.Button(self.frame,bg="lightgrey", text=text,width=8,height=h)
|
|
|
+ b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
|
|
|
+ else:
|
|
|
+ b["height"] = h
|
|
|
+ b.grid(row=r, column=c, sticky=tk.W+tk.E)#,anchor="w")
|
|
|
+
|
|
|
+ r+=1
|
|
|
+ c+=1
|
|
|
+ r=1
|
|
|
+
|
|
|
+ self.BUF = BUF
|
|
|
+ self.frame.pack()
|
|
|
+ INIT_OK = 1
|
|
|
+ self.start_loop()
|
|
|
+
|
|
|
+ def start_loop(self):
|
|
|
+ print(self,"--- start_bg_loop ----- xxxx")
|
|
|
+ thread.start_new_thread(mytklib.tk_btn_bg_loop,(self.TITLE,))
|
|
|
+
|
|
|
+ def on_top(self,event,data={}):
|
|
|
+ print("menue.on_top",data)
|
|
|
+ MAIN.window_manager.top(data["text"])
|
|
|
+
|
|
|
+ def update(self,button,text):
|
|
|
+ #print(self,button,text)
|
|
|
+ for k in self.elem:
|
|
|
+ v=self.elem[k]
|
|
|
+ #print(self,k,v)
|
|
|
+ if button == k:
|
|
|
+ v["elem"]["text"] = k+"\n"+text
|
|
|
+
|
|
|
+ def config(self,button,attr,value):
|
|
|
+ #print("config",self,button,attr,value)
|
|
|
+ for k in self.elem:
|
|
|
+ v=self.elem[k]
|
|
|
+ #print(self,k,v)
|
|
|
+ if button == k:
|
|
|
+ #print(dir(v["elem"]))
|
|
|
+ if attr == "bg":
|
|
|
+ if value == "":
|
|
|
+ value = "lightgrey"
|
|
|
+ v["elem"][attr] = str(value)
|
|
|
+ if attr == "activebackground":
|
|
|
+ if value == "":
|
|
|
+ value = "lightgrey"
|
|
|
+ v["elem"][attr] = str(value)
|
|
|
+
|