Initial commit with README
This commit is contained in:
183
sys/kernel/UI.py
Normal file
183
sys/kernel/UI.py
Normal file
@@ -0,0 +1,183 @@
|
||||
from tools import *
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TasksFrame=""
|
||||
ui_mik=""
|
||||
tkinter_mik=""
|
||||
master=""
|
||||
|
||||
def index(root,W,H):
|
||||
screenWidth = root.winfo_screenwidth()
|
||||
screenHeight = root.winfo_screenheight()
|
||||
width = W
|
||||
height = H
|
||||
left = (screenWidth - width) / 2
|
||||
top = (screenHeight - height) / 2
|
||||
root.geometry("%dx%d+%d+%d" % (width, height, left, top))
|
||||
def index100(root,W,H):
|
||||
screenWidth = root.winfo_screenwidth()
|
||||
screenHeight = root.winfo_screenheight()
|
||||
width = W
|
||||
height = H
|
||||
left = (screenWidth - width) / 2
|
||||
top = (screenHeight - height) / 2 - 100
|
||||
root.geometry("%dx%d+%d+%d" % (width, height, left, top))
|
||||
def index50(root,W,H):
|
||||
screenWidth = root.winfo_screenwidth()
|
||||
screenHeight = root.winfo_screenheight()
|
||||
width = W
|
||||
height = H
|
||||
left = (screenWidth - width) / 2
|
||||
top = (screenHeight - height) / 2 - 50
|
||||
root.geometry("%dx%d+%d+%d" % (width, height, left, top))
|
||||
|
||||
|
||||
|
||||
class Menu(tk.Frame):
|
||||
def __init__(self,master):
|
||||
if hasattr(master,"Widget"):
|
||||
master=master.Widget
|
||||
super().__init__(master,bg="#FFF",highlightbackground="#fed79e")
|
||||
self.pack(fill=tk.X,anchor="sw",side="top")
|
||||
self.subs=[]
|
||||
def add_sub(self,label,menu=tk.Menu,font=("微软雅黑",10)):
|
||||
sub=tk.Button(self,text=label+" "*3,bg="#FFF",fg="#000",font=font,bd=0)
|
||||
sub.pack(side=tk.LEFT)
|
||||
sub.config(command=lambda:self.Choose(sub,menu))
|
||||
menu.config(bg="#FFF")
|
||||
self.subs.append([sub,menu])
|
||||
def Choose(self,subutton=tk.Button,menu=tk.Menu):
|
||||
root_x = self.master.winfo_rootx()
|
||||
root_y = self.master.winfo_rooty()
|
||||
x = subutton.winfo_x() + root_x
|
||||
y = subutton.winfo_y() + subutton.winfo_height() + root_y
|
||||
menu.post(x, y)
|
||||
|
||||
|
||||
|
||||
class Window(tk.Toplevel):
|
||||
def __init__(self,title="MikOs - NewWindow",geometry="700x500"):
|
||||
super().__init__()
|
||||
index(self,1000,600)
|
||||
self.TasksFrame=TasksFrame
|
||||
self.withdraw()
|
||||
self.geometry(geometry)
|
||||
self.overrideredirect(True)
|
||||
self.config(bg="#FFF")
|
||||
self.focus()
|
||||
self.wm_attributes("-topmost",True)
|
||||
|
||||
self.Title=tk.Frame(self,bg="#FFF",highlightbackground="#fed79e")
|
||||
self.Title.pack(fill=tk.X)
|
||||
|
||||
self.TitleTextSpace1=tk.Label(self.Title,text=" ",fg="#FFF",bg="#FFF")
|
||||
self.TitleTextSpace1.pack(side=tk.LEFT)
|
||||
|
||||
self.TitleICOImage=ImageTk.PhotoImage(Image.open(tkinter_mik+"ICO.png"))
|
||||
self.TitleICO=tk.Label(self.Title,image=self.TitleICOImage,fg="#FFF",bg="#FFF")
|
||||
self.TitleICO.pack(side=tk.LEFT)
|
||||
|
||||
self.TitleTextSpace2=tk.Label(self.Title,text=" ",fg="#FFF",bg="#FFF")
|
||||
self.TitleTextSpace2.pack(side=tk.LEFT)
|
||||
|
||||
self.TitleText=tk.Label(self.Title,text=title,bg="#FFF",fg="#000",font=("字魂59号-创粗黑",12))
|
||||
self.TitleText.pack(side=tk.LEFT)
|
||||
|
||||
self.TitleTextSpace3=tk.Label(self.Title,text=" ",fg="#FFF",bg="#FFF")
|
||||
self.TitleTextSpace3.pack(side=tk.LEFT)
|
||||
|
||||
self.Widget=tk.Frame(self,bg="#FFF",highlightbackground="#fed79e")
|
||||
self.Widget.pack(fill="both",expand=True)
|
||||
|
||||
self.ExitImg = ImageTk.PhotoImage(Image.open(ui_mik+"close_100.png"))
|
||||
self.Exit = tk.Button(self.Title, bg=self.Title.cget("bg"), bd=0, width=40, relief=tk.FLAT, activebackground="#C42B1C",image=self.ExitImg,command=self.destroy)
|
||||
self.Exit.bind("<Enter>", lambda _: self.Exit.config(background="#dd0009"))
|
||||
self.Exit.bind("<Leave>", lambda _: self.Exit.config(background=self.Title.cget("bg") if self.focus else "#797979"))
|
||||
self.Exit.pack(fill=tk.Y, side=tk.RIGHT)
|
||||
|
||||
def ComMax():
|
||||
self.wm_state("zoomed")
|
||||
self.Max.config(image=self.MaxSmallImg,command=ComMaxSmall)
|
||||
self.Title.bind("<Double-Button-1>", lambda event:ComMaxSmall())
|
||||
def ComMaxSmall():
|
||||
self.wm_state("normal")
|
||||
self.Max.config(image=self.MaxImg,command=ComMax)
|
||||
self.Title.bind("<Double-Button-1>", lambda event:ComMax())
|
||||
self.EmbedParentWindow()
|
||||
|
||||
self.MaxImg = ImageTk.PhotoImage(Image.open(ui_mik+"fullwin_100.png"))
|
||||
self.MaxSmallImg = ImageTk.PhotoImage(Image.open(ui_mik+"togglefull_100.png"))
|
||||
self.Max = tk.Button(self.Title, bg=self.Title.cget("bg"), bd=0, width=40, relief=tk.FLAT, activebackground="#ebedf1",image=self.MaxImg,command=ComMax)
|
||||
self.Max.bind("<Enter>", lambda _: self.Max.config(background="#f2efef"))
|
||||
self.Max.bind("<Leave>", lambda _: self.Max.config(background=self.Title.cget("bg") if self.focus else "#797979"))
|
||||
self.Max.pack(fill=tk.Y, side=tk.RIGHT)
|
||||
self.Title.bind("<Double-Button-1>", lambda event:ComMax())
|
||||
|
||||
self.MinImg = ImageTk.PhotoImage(Image.open(ui_mik+"minisize_100.png"))
|
||||
self.Min = tk.Button(self.Title, bg=self.Title.cget("bg"), bd=0, width=40, relief=tk.FLAT, activebackground="#ebedf1",image=self.MinImg,command=self.stateicon)
|
||||
self.Min.bind("<Enter>", lambda _: self.Min.config(background="#f2efef"))
|
||||
self.Min.bind("<Leave>", lambda _: self.Min.config(background=self.Title.cget("bg") if self.focus else "#797979"))
|
||||
self.Min.pack(fill=tk.Y, side=tk.RIGHT)
|
||||
|
||||
if type(self.TasksFrame) == type(self.Title):
|
||||
self.TaskICOImage=ImageTk.PhotoImage(Image.open(ui_mik+"text_file.png").resize([15,15]))
|
||||
self.TaskICO=tk.Button(self.TasksFrame,image=self.TaskICOImage,bg=TasksFrame.cget("bg"),fg="#000",bd=0,command=self.statenor)
|
||||
self.TaskICO.pack(side=tk.LEFT)
|
||||
|
||||
self.MoveBind()
|
||||
self.EmbedParentWindow()
|
||||
self.deiconify()
|
||||
def MoveBind(self):
|
||||
x=0
|
||||
y=0
|
||||
def start_move(event):
|
||||
nonlocal x, y
|
||||
x = event.x
|
||||
y = event.y
|
||||
def stop_move(event):
|
||||
nonlocal x, y
|
||||
x = None
|
||||
y = None
|
||||
def on_motion(event):
|
||||
nonlocal x, y
|
||||
deltax = event.x - x
|
||||
deltay = event.y - y
|
||||
self.geometry(f"+{self.winfo_x() + deltax}+{self.winfo_y() + deltay}")
|
||||
self.update()
|
||||
self.Title.bind("<ButtonPress-1>", start_move)
|
||||
self.Title.bind("<ButtonRelease-1>", stop_move)
|
||||
self.Title.bind("<B1-Motion>", on_motion)
|
||||
self.TitleText.bind("<ButtonPress-1>", start_move)
|
||||
self.TitleText.bind("<ButtonRelease-1>", stop_move)
|
||||
self.TitleText.bind("<B1-Motion>", on_motion)
|
||||
def destroy(self):
|
||||
if type(self.TasksFrame) == type(self.Title):
|
||||
self.TaskICO.destroy()
|
||||
super().destroy()
|
||||
def stateicon(self):
|
||||
self.wm_overrideredirect(False)
|
||||
self.wm_state("icon")
|
||||
def statenor(self):
|
||||
if self.wm_state() != "normal":
|
||||
self.EmbedParentWindow()
|
||||
self.wm_overrideredirect(True)
|
||||
self.wm_state("normal")
|
||||
self.wm_attributes("-topmost",True)
|
||||
else:
|
||||
self.stateicon()
|
||||
@asyncs
|
||||
def EmbedParentWindow(self):
|
||||
#while True:
|
||||
# if master:
|
||||
# u32.SetParent(u32.GetParent(self.winfo_id()),master.winfo_id())
|
||||
# time.sleep(1)
|
||||
for i in range(10):
|
||||
u32.SetParent(u32.GetParent(self.winfo_id()),master.winfo_id())
|
||||
Reference in New Issue
Block a user