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("", lambda _: self.Exit.config(background="#dd0009")) self.Exit.bind("", 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("", lambda event:ComMaxSmall()) def ComMaxSmall(): self.wm_state("normal") self.Max.config(image=self.MaxImg,command=ComMax) self.Title.bind("", 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("", lambda _: self.Max.config(background="#f2efef")) self.Max.bind("", 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("", 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("", lambda _: self.Min.config(background="#f2efef")) self.Min.bind("", 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("", start_move) self.Title.bind("", stop_move) self.Title.bind("", on_motion) self.TitleText.bind("", start_move) self.TitleText.bind("", stop_move) self.TitleText.bind("", 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())