import tkinter as tk
from tkinter import messagebox
# -------------------------------
# Sliding Menu Application Class
# -------------------------------
class SlidingMenuApp:
def __init__(self, root):
self.root = root
self.root.title("Sliding Menu Example")
self.root.geometry("600x400")
self.root.config(bg="white")
# Menu state
self.menu_width = 200
self.menu_current_x = -self.menu_width
self.menu_target_x = -self.menu_width
self.menu_speed = 20 # pixels per frame
# Create menu frame (hidden initially)
self.menu_frame = tk.Frame(self.root, bg="#2c3e50", width=self.menu_width, height=400)
self.menu_frame.place(x=self.menu_current_x, y=0)
# Add menu items
self.add_menu_items()
# Create toggle button on the right side
self.toggle_btn = tk.Button(
self.root, text="☰", font=("Arial", 14, "bold"),
bg="#3498db", fg="white", command=self.toggle_menu
)
self.toggle_btn.place(relx=1.0, x=-40, y=10, anchor="ne")
# Start animation loop
self.animate()
def add_menu_items(self):
"""Add menu buttons."""
menu_items = [
("Home", lambda: self.show_message("Home")),
("Information", lambda: self.show_message("Information")),
("Activities", lambda: self.show_message("Activities")),
("Feedback", lambda: self.show_message("Feedback")),
]
for i, (text, cmd) in enumerate(menu_items):
btn = tk.Button(
self.menu_frame, text=text, font=("Arial", 12),
bg="#34495e", fg="white", relief="flat", command=cmd
)
btn.place(x=10, y=20 + i * 50, width=self.menu_width - 20, height=40)
def show_message(self, title):
"""Show a message box for menu item."""
messagebox.showinfo("Menu Clicked", f"You clicked: {title}")
def toggle_menu(self):
"""Toggle menu open/close."""
if self.menu_target_x < 0:
self.menu_target_x = 0 # open
else:
self.menu_target_x = -self.menu_width # close
def animate(self):
"""Smoothly animate menu sliding."""
if self.menu_current_x < self.menu_target_x:
self.menu_current_x += self.menu_speed
if self.menu_current_x > self.menu_target_x:
self.menu_current_x = self.menu_target_x
elif self.menu_current_x > self.menu_target_x:
self.menu_current_x -= self.menu_speed
if self.menu_current_x < self.menu_target_x:
self.menu_current_x = self.menu_target_x
# Update menu position
self.menu_frame.place(x=self.menu_current_x, y=0)
# Repeat animation
self.root.after(15, self.animate)
# -------------------------------
# Run the Application
# -------------------------------
if __name__ == "__main__":
root = tk.Tk()
app = SlidingMenuApp(root)
root.mainloop()






