CTkMenuBar
CTkMenuBar copied to clipboard
a little bit optimized for me and pywinstyles
There may be mistakes, I suggest you check before adding
this is a litlle update for title menu
def __init__(
self,
master,
title_bar_color = "default",
padx: int = 10,
width: int = 10,
x_offset: int = None,
y_offset: int = None):
super().__init__()
if not platform.startswith("win"):
raise OSError("This title menu works only in windows platform, not supported on your system! \nTry the CTkMenuBar instead...")
#self.after(10)
self.master = master
if "zoomed" not in self.master.state():
not_zoomed=1
self.master.state("zoomed")
else:
not_zoomed=0
master_type = self.master.winfo_name()
if master_type=="tk":
pass
elif master_type.startswith("!ctktoplevel"):
pass
elif master_type.startswith("!toplevel"):
pass
else:
raise TypeError("Only root windows/toplevels can be passed as the master!")
self.master.minsize(200,100)
self.overrideredirect(True)
if title_bar_color=="default":
if customtkinter.get_appearance_mode()=="Light":
title_bar_color = 0xFFFFFF # RGB order: 0xrrggbb
else:
title_bar_color = 0x303030 # RGB order: 0xrrggbb
self.transparent_color = self._apply_appearance_mode(self._fg_color)
self.attributes("-transparentcolor", self.transparent_color)
self.resizable(True, True)
self.transient(self.master)
self.menu = []
self.config(background=self.transparent_color)
self.caption_color = title_bar_color
self.x_offset = 40 if x_offset is None else x_offset
self.y_offset = 6 if y_offset is None else y_offset
self.width = width
if x_offset is None:
title = self.master.title()
if len(title)>=1:
for i in title:
if i.islower():
self.x_offset += 9
else:
self.x_offset += 7
self.padding = padx
if not_zoomed:
self.master.state("normal")
self.master.bind("<Configure>", lambda _: self.change_dimension())
self.master.bind("<Destroy>", lambda _: super().destroy() if not self.master.winfo_viewable() else None)
self.num = 0
self.master.bind("<Map>", lambda e: self.withdraw)