from customtkinter import * from CTkTable import * from PIL import Image import frame_table import frame_dashboard import colors # Links # - Icons: https://www.flaticon.com # - CustomTkinter: https://customtkinter.tomschimansky.com/ # - CTkTable: https://github.com/Akascape/CTkTable # Referenzen # - Vorlage: https://github.com/RoyChng/customtkinter-examples/tree/master/Inventory%20Management set_appearance_mode("light") # Bei Änderung muss "text" von Window_Settings/button_appearance ebenfalls geändert werden! class Window_Settings(CTkToplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.downSized = 0.5 self.geometry("%dx%d" % (self.master.height*16/9*self.downSized, self.master.height*self.downSized)) self.title("Einstellungen") self.frame_appearance = CTkFrame(master=self) self.frame_appearance.pack(expand=True) self.label = CTkLabel(self.frame_appearance, text="Erscheinung") self.label.pack(padx=5, pady=5) self.img_appearance = CTkImage(dark_image=Image.open("img/icons/moon_black.png"), light_image=Image.open("img/icons/sun_white.png")) self.button_appearance = CTkButton(master=self.frame_appearance, image=self.img_appearance, text="Hell", text_color =("White","Black"),fg_color=("Black","White"), font=("Arial Bold", 14), hover_color=("#1A1A1A","#E6E6E6"), anchor="w",command=self.toggleAppearance) self.button_appearance.pack(padx=5, pady=5) def toggleAppearance(self): if(get_appearance_mode()=="Dark"): self.button_appearance.configure(text="Hell") set_appearance_mode("light") else: self.button_appearance.configure(text="Dunkel") set_appearance_mode("dark") class Main_Window(CTk): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.title("Bundesjugendspiele-GUI") self.height= self.winfo_screenheight() self.scale = self.height/720 self.downSized = 0.8 self.geometry("%dx%d" % (self.height*16/9*self.downSized, self.height*self.downSized)) set_widget_scaling(self.scale*self.downSized) self.sidebar_frame = CTkFrame(master=self, fg_color=colors.mainColor, width=176, corner_radius=10*self.scale, bg_color="transparent") self.sidebar_frame.pack(fill=Y,side=LEFT,anchor="w",padx=5, pady=5) self.img = [Image.open("img/logo_running.png"), Image.open("img/icons/analytics_white.png"), Image.open("img/icons/pen_white.png"), Image.open("img/icons/table_white.png"), Image.open("img/icons/group_white.png"), Image.open("img/icons/settings_white.png")] self.img_red = [Image.open("img/icons/analytics_red.png"), Image.open("img/icons/pen_red.png"), Image.open("img/icons/table_red.png"), Image.open("img/icons/group_red.png")] self.img_logo = CTkImage(dark_image=self.img[0], light_image=self.img[0], size=(100,100)) self.logo = CTkLabel(master=self.sidebar_frame, text="", image=self.img_logo) self.logo.pack(padx=5, pady=20) self.img_dashboard = CTkImage(dark_image=self.img[1], light_image=self.img[1]) self.img_dashboard_red = CTkImage(dark_image=self.img_red[0], light_image=self.img_red[0]) self.button1 = CTkButton(master=self.sidebar_frame, image=self.img_dashboard, text="Dashboard", text_color="#fff", fg_color="transparent", font=("Arial Bold", 14), hover_color=colors.contrastColor, anchor="w", command=lambda: self.initiate_window(1)) self.button1.pack(padx=5, pady=5) self.img_edit = CTkImage(dark_image=self.img[2], light_image=self.img[2]) self.img_edit_red = CTkImage(dark_image=self.img_red[1], light_image=self.img_red[1]) self.button2 = CTkButton(master=self.sidebar_frame, image=self.img_edit, text="Eintragen", text_color="#fff", fg_color="transparent", font=("Arial Bold", 14), hover_color=colors.contrastColor, anchor="w", command=lambda: self.initiate_window(2)) self.button2.pack(padx=5, pady=5) self.img_table = CTkImage(dark_image=self.img[3], light_image=self.img[3]) self.img_table_red = CTkImage(dark_image=self.img_red[2], light_image=self.img_red[2]) self.button3 = CTkButton(master=self.sidebar_frame, image=self.img_table, text="Werte", text_color="#fff", fg_color="transparent", font=("Arial Bold", 14), hover_color=colors.contrastColor, anchor="w", command=lambda: self.initiate_window(3)) self.button3.pack(padx=5, pady=5) self.img_users = CTkImage(dark_image=self.img[4], light_image=self.img[4]) self.img_users_red = CTkImage(dark_image=self.img_red[3], light_image=self.img_red[3]) self.button4 = CTkButton(master=self.sidebar_frame, image=self.img_users, text="Sportler", text_color="#fff", fg_color="transparent", font=("Arial Bold", 14), hover_color=colors.contrastColor, anchor="w", command=lambda: self.initiate_window(4)) self.button4.pack(padx=5, pady=5) self.img_settings = CTkImage(dark_image=self.img[5], light_image=self.img[5]) self.button5 = CTkButton(master=self.sidebar_frame, image=self.img_settings, text="Einstellungen", text_color="#fff", fg_color="transparent", font=("Arial Bold", 14), hover_color=colors.contrastColor, anchor="w", command=self.open_window_settings) self.button5.pack(padx=10, pady=10,side=BOTTOM) self.window_settings = None self.main_container = CTkFrame(self, corner_radius=10) self.main_container.pack(fill=BOTH, expand=True, padx=(0,5), pady=5,side=RIGHT) self.lastWindow = None self.lastButton = None self.initiate_window(3) def initiate_window(self,windowNumber): if(windowNumber!=self.lastWindow): self.updateButton(windowNumber) self.clear_frame() if(windowNumber==1): frame_dashboard.create(self) elif(windowNumber==2): self.window_2() elif(windowNumber==3): frame_table.create(self) elif(windowNumber==4): self.window_4() self.lastWindow = windowNumber def updateButton(self,buttonNumber): buttons = [self.button1,self.button2,self.button3,self.button4] img = [self.img_dashboard,self.img_edit,self.img_table,self.img_users] img_red = [self.img_dashboard_red,self.img_edit_red,self.img_table_red,self.img_users_red] buttons[buttonNumber-1].configure(fg_color="#fff", hover_color="#eee",text_color=colors.mainColor,image=img_red[buttonNumber-1]) if(self.lastButton != None): buttons[self.lastButton-1].configure(fg_color="transparent", hover_color=colors.contrastColor, text_color="#fff",image=img[self.lastButton-1]) self.lastButton = buttonNumber def window_2(self): # Eintragen self.buttonTest = CTkButton(master=self.main_container, text="Eintragen", fg_color=colors.contrastColor, font=("Arial Bold", 14), hover_color=colors.mainColor, anchor="center") self.buttonTest.pack(padx=5, pady=5,expand=True) def window_4(self): # Sportler self.buttonTest = CTkButton(master=self.main_container, text="Sportler", fg_color=colors.contrastColor, font=("Arial Bold", 14), hover_color=colors.mainColor, anchor="center") self.buttonTest.pack(padx=5, pady=5,expand=True) def open_window_settings(self): # Einstellungen if self.window_settings is None or not self.window_settings.winfo_exists(): self.window_settings = Window_Settings(self) # create window if its None or destroyed else: self.window_settings.focus() # if window exists focus it def clear_frame(self): for widget in self.main_container.winfo_children(): widget.destroy() app = Main_Window() app.mainloop()