from customtkinter import * from PIL import Image class App(CTk): def __init__(self): super().__init__() self.title("Personal Gallery") self.iconbitmap("images\\gallery.ico") self.configure(fg_color="#181b1f") # setting up counter and images self.counter = 0 # getting all the images in a list # If you have a lot of them, I suggest store them in a different file self.images = [CTkImage(light_image=Image.open("images\\forest.jpg"),size=(496.9,331.3)), CTkImage(light_image=Image.open("images\\moon.jpg"),size=(390.6,260.4)), CTkImage(light_image=Image.open("images\\mountain.jpg"),size=(654.1,436.1)), CTkImage(light_image=Image.open("images\\stone.jpg"),size=(593.7,416)), CTkImage(light_image=Image.open("images\\tree.jpg"),size=(624,416))] # images for buttons (forward and backward buttons) self.forward_img = CTkImage(light_image=Image.open("images\\forward.png"), size=(50,50)) self.backward_img = CTkImage(light_image=Image.open("images\\backward.png"), size=(50,50)) # label to show images self.il = CTkLabel(self,text="",image=self.images[self.counter]) self.il.grid(row=0, column=0, columnspan=3, padx=10, pady=10) # buttons self.front = CTkButton(self, text="", image=self.forward_img, fg_color="transparent", hover_color="#181b1f", command=self.next_command) self.back = CTkButton(self, text="", image=self.backward_img, fg_color="transparent", hover_color="#181b1f", command=self.previous) self.front.grid(row=1, column=2, padx=10, pady=10) self.back.grid(row=1, column=0, padx=10, pady=10) # exit button self.qb = CTkButton(self, text="Exit", fg_color="red", hover_color="pink", text_color="white", command=self.quit) self.qb.grid(row=1, column=1, padx=10, pady=10) # status bar self.status = CTkLabel(self, text=f"Image {self.counter + 1} of {len(self.images)}") self.status.grid(row=2, column=2, padx=25) def next_command(self): # To keep counter from being more than 4 # (4+1)%5 = 0 # ensures cycle self.counter = (self.counter + 1) % len(self.images) self.update() def previous(self): # To keep counter from being less than 0 # (0-1)%5 = 4 # ensures cycle self.counter = (self.counter - 1) % len(self.images) self.update() def update(self): # removes label from the grid self.il.grid_forget() # updating image self.il = CTkLabel(self,text="",image=self.images[self.counter]) self.il.grid(row=0, column=0, columnspan=3, padx=10, pady=10) # updating status bar self.status = CTkLabel(self, text=f"Image {self.counter + 1} of {len(self.images)}") self.status.grid(row=2, column=2, padx=25) if __name__ == '__main__': app = App() app.mainloop()