Split the "..." menu into for buttons "S" for stats, "I" for import, "E" for Export, "D" for change datatypes. lets think step by step. Python 3.12 Code: class Header:
    """Class for handling header UI."""

    DATA_TYPE_OPTIONS = ["string", "integer", "float", "boolean"]

    def __init__(self, root: tk.Tk, app: 'TableApp'):
        self.root = root
        self.app = app
        self.style = app.style
        self.colors = app.colors
        self.fonts = app.fonts
        self.dimensions = app.dimensions
        self.table_name_label = None
        self.lower_header_frame = None
        self.result = None
        self._setup_header()

    def _setup_header(self) -> None:
        header_frame = self._setup_main_frame()
        self._setup_upper_section(header_frame)
        self._setup_lower_section(header_frame)

    def _setup_main_frame(self) -> tk.Frame:
        header_frame = create_frame(parent=self.root, width=None, bg=self.colors["background"])
        header_frame.grid(row=0, column=1, columnspan=2, sticky="ew")
        header_frame.config(height=self.dimensions["header_height"])
        header_frame.grid_propagate(False)
        header_frame.grid_rowconfigure(0, weight=0)
        header_frame.grid_rowconfigure(1, weight=0)
        for i in range(5):
            header_frame.grid_columnconfigure(i, weight=1 if i == 4 else 0)
        return header_frame

    def _setup_upper_section(self, parent: tk.Frame) -> None:
        upper_frame = create_frame(parent=parent, width=None, bg=self.colors["background"])
        upper_frame.grid(row=0, column=0, columnspan=5, sticky="ew", pady=(0, 10))
        upper_frame.grid_columnconfigure(5, weight=1)
        self._add_upper_content(upper_frame)

    def _add_upper_content(self, frame: tk.Frame) -> None:
        tk.Label(frame, text="Data > ", bg=self.colors["background"],
                fg=self.colors["header_info"], font=self.fonts["header_info"]).grid(
                row=0, column=0, padx=22, pady=(22, 0), sticky="nw")

        self.table_name_label = tk.Label(frame, text=self.app.current_table_name or "No Table Selected",
                                       bg=self.colors["background"], fg=self.colors["text"],
                                       font=self.fonts["header_info"])
        self.table_name_label.grid(row=0, column=0, padx=(88, 10), pady=(22, 0), sticky="nw")

        self._setup_settings_section(frame)

    def _setup_settings_section(self, frame: tk.Frame) -> None:
        settings_container = tk.Frame(frame, bg=self.colors["background"])
        settings_container.grid(row=0, column=5, padx=(0, 40), pady=(22, 0), sticky="ne")

        settings_label = tk.Label(settings_container, text="...", bg=self.colors["background"],
                                fg=self.colors["text"], cursor="hand2", anchor="e",
                                font=self.fonts["text"])
        settings_label.pack(anchor="e")

        def on_enter(_):
            settings_label.config(bg=self.colors["button_selected"])

        def on_leave(_):
            settings_label.config(bg=self.colors["background"])

        settings_menu = self._create_settings_menu()
        settings_label.bind("<Button-1>", lambda e: settings_menu.post(e.x_root, e.y_root))
        settings_label.bind("<Enter>", on_enter)
        settings_label.bind("<Leave>", on_leave)

    def _create_settings_menu(self) -> tk.Menu:
        menu = tk.Menu(self.root, tearoff=0, bg=self.colors["background"],
                      fg=self.colors["text"], font=self.fonts["header_info"])

        stats_menu = tk.Menu(menu, tearoff=0, bg=self.colors["background"],
                           fg=self.colors["text"], font=self.fonts["header_info"])
        menu.add_cascade(label="Stats", menu=stats_menu)
        stats_menu.add_command(label="Boolean Count: 0", command=None)
        self.true_counter_label = stats_menu

        menu_items = [
            ("Export Table", self.app.table_io.export_table),
            ("Import Table", self.app.table_io.import_file),
            ("Change Datatypes", self.show_datatype_dialog)
        ]

        for label, command in menu_items:
            menu.add_command(label=label, command=command)

        return menu

    def _setup_lower_section(self, parent: tk.Frame) -> None:
        self.lower_header_frame = create_frame(parent=parent, width=None,
                                             bg=self.colors["background"])
        self.lower_header_frame.grid(row=1, column=0, columnspan=5, sticky="ew")

    def update_true_counter(self, count_text: str) -> None:
        if hasattr(self, 'true_counter_label'):
            self.true_counter_label.entryconfig(0, label=f"Boolean Count: {count_text}")

    def show_datatype_dialog(self) -> None:
        """Show dropdown menu for changing column data types."""
        table_name = self.app.current_table_name
        if not table_name:
            messagebox.showwarning("No Table Selected", "Please select a table to change datatypes.")
            return

        current_headers = self.app.current_sheet.headers() if self.app.current_sheet else []
        self.app.data_manager.headers[table_name] = current_headers
        self.data_types = self.app.data_manager.tables_data[table_name].get("data_types", []).copy()

        while len(self.data_types) < len(current_headers):
            self.data_types.append('string')

        self.datatype_menu = tk.Menu(self.root, tearoff=0, bg=self.colors["background"],
                              fg=self.colors["text"], font=self.fonts["text"])

        self.menu_x = self.root.winfo_pointerx()
        self.menu_y = self.root.winfo_pointery()

        self._populate_datatype_menu(current_headers)

        self.datatype_menu.post(self.menu_x, self.menu_y)

    def _populate_datatype_menu(self, headers):
        """Populate the datatype menu with headers and their current types."""
        self.datatype_menu.delete(0, 'end')

        for header in headers:
            header_index = headers.index(header)
            current_type = self.data_types[header_index]
            submenu = tk.Menu(self.datatype_menu, tearoff=0, bg=self.colors["background"],
                             fg=self.colors["text"], font=self.fonts["text"])
            self.datatype_menu.add_cascade(label=f"{header}: {current_type}", menu=submenu)

            for dtype in self.DATA_TYPE_OPTIONS:
                submenu.add_command(
                    label=dtype,
                    command=lambda h=header, t=dtype: self._update_datatype(h, t),
                    background=self.colors["button_selected"] if dtype == current_type
                    else self.colors["background"]
                )

        self.datatype_menu.add_separator()
        self.datatype_menu.add_command(label="Apply Changes",
                                     command=self._apply_changes)

    def _update_datatype(self, header: str, new_type: str) -> None:
        """Update the datatype for a specific header."""
        current_headers = self.app.current_sheet.headers()
        header_index = current_headers.index(header)
        self.data_types[header_index] = new_type

        self._populate_datatype_menu(current_headers)

        self.datatype_menu.post(self.menu_x, self.menu_y)

    def _apply_changes(self) -> None:
        """Apply the datatype changes and update the table."""
        table_name = self.app.current_table_name
        self.app.data_manager.tables_data[table_name]["data_types"] = self.data_types
        self.app.data_manager.save_data()
        self.app.table_display.apply_column_data_types(self.data_types)
        self.app.table_display.process_and_save_current_sheet_data()
        self.app.refresh_table()
        self.datatype_menu.unpost()