import tkinter as tk
class SlidingMenuApp:
def __init__(self, root):
self.root = root
self.root.title("Sliding Menu")
self.root.geometry("400x600")
# Menu configuration
self.menu_width = 200
self.menu_height = 400
self.is_open = False
# Calculate hidden starting position (below the window)
self.hidden_y = 600
self.visible_y = 200 # Height where it stops
# --- Create Menu Frame ---
self.menu_frame = tk.Frame(self.root, bg="#333333", width=self.menu_width, height=self.menu_height)
self.menu_frame.place(x=-self.menu_width, y=self.hidden_y) # Initially hidden
self.menu_frame.pack_propagate(False) # Maintain size
# --- Menu Items ---
menu_items = ["menuitem1", "menuitem2", "menuitem3", "menuitem4",
"menuitem5", "menuitem6", "menuitem7"]
for item in menu_items:
btn = tk.Button(self.menu_frame, text=item, bg="#333333", fg="white",
font=("Arial", 12), bd=0, anchor="w",
command=lambda i=item: print(f"{i} clicked"))
btn.pack(fill="x", pady=10, padx=20)
# --- Toggle Button ---
self.toggle_btn = tk.Button(self.root, text="Menu", command=self.toggle_menu,
bg="white", font=("Arial", 12))
self.toggle_btn.place(x=10, y=10)
def toggle_menu(self):
if not self.is_open:
self.slide_in(self.hidden_y)
else:
self.slide_out(self.visible_y)
def slide_in(self, y_pos):
if y_pos > self.visible_y:
y_pos -= 20 # Speed of slide
self.menu_frame.place(x=0, y=y_pos)
self.root.after(10, lambda: self.slide_in(y_pos))
else:
self.is_open = True
def slide_out(self, y_pos):
if y_pos < self.hidden_y:
y_pos += 20 # Speed of slide
self.menu_frame.place(x=0, y=y_pos)
self.root.after(10, lambda: self.slide_out(y_pos))
else:
self.menu_frame.place(x=-self.menu_width, y=self.hidden_y)
self.is_open = False
if __name__ == "__main__":
root = tk.Tk()
app = SlidingMenuApp(root)
root.mainloop()

Tidak ada komentar:
Posting Komentar