Sabtu, 18 April 2026

Python Menu 2

 




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: