Initial commit with README

This commit is contained in:
GVSADS
2026-01-25 17:01:16 +08:00
commit 246bbd8fd9
106 changed files with 2071 additions and 0 deletions

183
sys/kernel/UI.py Normal file
View 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())