183 lines
7.1 KiB
Python
183 lines
7.1 KiB
Python
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()) |