CTkMenuBarPlus


NameCTkMenuBarPlus JSON
Version 1.0 PyPI version JSON
download
home_pageNone
SummaryModern menu bar widget library for customtkinter with enhanced features
upload_time2025-08-09 15:53:09
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License Copyright (c) 2025 xzyqox Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords customtkinter menu menubar dropdown gui tkinter accelerators context-menu
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # CTkMenuBarPlus
Modern menu bar widget library for customtkinter with enhanced features.

## Features
- Custom dropdown menus with full customization
- Menu bar integration - add menus to window top or title bar
- Keyboard shortcuts/accelerators - layout-independent key bindings
- Icons in menu items - PNG, JPG, or PIL Image support
- Checkable menu items - toggle states with visual feedback
- Context menus - right-click dropdown support
- Scrollable menus - automatic scrollbars for long option lists
- Dynamic menu control - enable/disable items programmatically
- Platform support - cross-platform (Windows title menu Windows-only)

## Installation

```bash
pip install CTkMenuBarPlus
```

---

## Menu Types

## 1. CTkMenuBar

![menubar](https://github.com/Akascape/CTkMenuBar/assets/89206401/02c512b2-557f-4d59-86e0-a6eb9da3696c)

### Usage
```python
from CTkMenuBarPlus import *
import customtkinter as ctk

root = ctk.CTk()
menu_bar = CTkMenuBar(root)
file_button = menu_bar.add_cascade("File")
edit_button = menu_bar.add_cascade("Edit")
```

### Methods
- **.add_cascade(text, postcommand, kwargs)**: Add new menu button to the bar
- **.configure(kwargs)**: Update menu bar parameters
- **.cget(param)**: Get configuration parameter value
- **.show()**: Show the menu bar (if hidden)
- **.hide()**: Hide the menu bar
- **.toggle()**: Toggle menu bar visibility

### Arguments
| Parameter | Type | Description |
|-----------|------|-------------|
| **master** | Widget | Parent widget (root or frame) |
| **bg_color** | str/tuple | Background color (theme tuple or string) |
| **height** | int | Menu bar height in pixels (default: 25) |
| **width** | int | Menu button width in pixels (default: 10) |
| **padx** | int | Horizontal spacing between buttons (default: 5) |
| **pady** | int | Vertical padding (default: 2) |
| **postcommand** | callable | Function called before showing dropdown |
| ***other_args** | various | Additional CTkFrame parameters |

---

## 2. CTkTitleMenu

_Windows Only - integrates with window title bar_

![titlebar](https://github.com/Akascape/CTkMenuBar/assets/89206401/da6cd858-f700-476c-a2f0-93a1c6335a4d)

### Usage
```python
from CTkMenuBarPlus import *
import customtkinter as ctk

root = ctk.CTk()
title_menu = CTkTitleMenu(root)
file_button = title_menu.add_cascade("File")
```

### Methods
- **.add_cascade(text, kwargs)**: Add menu button to title bar
- **.show()**: Show the title menu
- **.hide()**: Hide the title menu  
- **.toggle()**: Toggle title menu visibility

### Arguments
| Parameter | Type | Description                |
|-----------|------|----------------------------|
| **master** | CTk/CTkToplevel | Parent window (root or toplevel only) |
| **title_bar_color** | str/int | Title bar color ("default" for auto theme) |
| **padx** | int | Spacing between menu buttons (default: 10) |
| **width** | int | Width of menu buttons (default: 10) |
| **x_offset** | int | Horizontal position offset |
| **y_offset** | int | Vertical position offset   |

---

## 3. CustomDropdownMenu

Core dropdown menu class with enhanced features - used by both CTkMenuBar and CTkTitleMenu.

### Usage
```python
from CTkMenuBarPlus import *

# Attach to any widget
dropdown = CustomDropdownMenu(widget=my_button)
dropdown.add_option("Option 1")
dropdown.add_separator()
submenu = dropdown.add_submenu("Submenu")
submenu.add_option("Sub Option")
```

### Enhanced Usage with New Features
```python
# Keyboard shortcuts
dropdown.add_option(
    option="Open", 
    command=open_file,
    accelerator="Ctrl+O"
)

# Checkable items
dropdown.add_option(
    option="Word Wrap",
    command=toggle_wrap,
    checkable=True,
    checked=True
)

# Icons in menu items
dropdown.add_option(
    option="Save",
    command=save_file,
    icon="assets/save.png",
    accelerator="Ctrl+S"
)

# Disabled items
dropdown.add_option(
    option="Advanced Settings",
    command=advanced_settings,
    enabled=False
)

# Dynamic state control
option_button = dropdown.add_option("Toggle Me", checkable=True)
option_button.set_checked(True)  # Set checked state
option_button.set_enabled(False)  # Disable item
```

### Methods
- **.add_option(option, command, kwargs)**: Add menu option with enhanced features
- **.add_separator()**: Add visual separator line
- **.add_submenu(submenu_name, kwargs)**: Add nested submenu
- **.configure(kwargs)**: Update dropdown appearance
- **.cget(param)**: Get configuration parameter
- **.show()**: Show the dropdown menu
- **.hide()**: Hide the dropdown menu
- **.destroy()**: Clean up resources and destroy menu

### Arguments
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| **widget** | Widget | - | Widget that triggers this dropdown |
| **master** | Widget | None | Parent widget (auto-determined if None) |
| **border_width** | int | 1 | Border width in pixels |
| **width** | int | 150 | Menu width in pixels |
| **height** | int | 25 | Menu item height in pixels |
| **bg_color** | str/tuple | None | Background color |
| **corner_radius** | int | 10 | Corner radius for rounded corners |
| **border_color** | str/tuple | "grey50" | Border color |
| **separator_color** | str/tuple | ("grey80", "grey20") | Separator line color |
| **text_color** | str/tuple | ("black", "white") | Text color |
| **fg_color** | str/tuple | "transparent" | Foreground color |
| **hover_color** | str/tuple | ("grey75", "grey25") | Hover color |
| **font** | CTkFont | ("helvetica", 12) | Font for menu text |
| **padx** | int | 3 | Horizontal padding |
| **pady** | int | 3 | Vertical padding |
| **cursor** | str | "hand2" | Cursor type on hover |
| **max_visible_options** | int | 10 | Options before scrollbar appears |
| **enable_scrollbar** | bool | True | Enable scrollbar for long menus |
| **scrollbar_width** | int | 16 | Scrollbar width in pixels |

### add_option() Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| **option** | str | - | Text to display for this option |
| **command** | callable | None | Function to call when selected |
| **accelerator** | str | None | Keyboard shortcut (e.g., "Ctrl+S", "Alt+F4") |
| **icon** | str/PIL.Image | None | Icon file path or PIL Image object |
| **checkable** | bool | False | Whether item can be checked/unchecked |
| **checked** | bool | False | Initial checked state (if checkable=True) |
| **enabled** | bool | True | Whether item is initially enabled |
| ***kwargs** | various | - | Additional CTkButton styling options |

---

## 4. ContextMenu

Right-click context menu with full dropdown functionality.

### Usage
```python
from CTkMenuBarPlus import *

# Create context menu for any widget
context_menu = ContextMenu(my_widget)
context_menu.add_option("Copy", copy_function, accelerator="Ctrl+C")
context_menu.add_option("Paste", paste_function, accelerator="Ctrl+V")
context_menu.add_separator()
context_menu.add_option("Delete", delete_function, accelerator="Delete")

# Right-click will automatically show the menu
```

### Methods
Same as CustomDropdownMenu - inherits all functionality plus:
- **Automatic right-click binding** to target widget and children
- **Cursor-position display** - appears where you right-click
- **Full feature support** - accelerators, icons, checkable items, submenus

### Arguments
| Parameter | Type | Description |
|-----------|------|-------------|
| **widget** | CTkBaseClass | Widget to attach context menu to |
| ***kwargs** | various | All CustomDropdownMenu parameters supported |

---

## Theming

CTkMenuBarPlus automatically adapts to customtkinter appearance modes:

```python
# Light/Dark mode support
ctk.set_appearance_mode("dark")  # "light" or "dark"

# Custom colors (theme tuples)
menu_bar = CTkMenuBar(
    root,
    bg_color=("white", "#2b2b2b"),  # (light_mode, dark_mode)
)

dropdown = CustomDropdownMenu(
    widget=button,
    bg_color=("white", "#1a1a1a"),
    text_color=("black", "white"),
    hover_color=("lightblue", "#3a3a3a")
)
```

---

## Error Handling

The library includes comprehensive error handling:

```python
from CTkMenuBarPlus import MenuWidgetBindingError, MenuCommandExecutionError

try:
    dropdown.add_option("Test", invalid_command)
except MenuCommandExecutionError as e:
    print(f"Command error: {e}")
```

**Custom Exception Classes:**
- `CTkMenuBarError` - Base exception
- `MenuWidgetBindingError` - Widget binding issues
- `MenuCommandExecutionError` - Command execution problems  
- `MenuToggleError` - Show/hide toggle failures
- `MenuOptionError` - Menu option operations
- `MenuIconError` - Icon loading/processing errors
- `MenuPositioningError` - Menu positioning failures
- `MenuScrollError` - Scrollable menu issues

---

## Advanced Features

### Scrollable Menus
Large menus automatically get scrollbars:
```python
dropdown = CustomDropdownMenu(
    widget=button,
    max_visible_options=5,  # Show scrollbar after 5 items
    enable_scrollbar=True,
    scrollbar_width=16
)
```

### Keyboard Accelerators
Layout-independent shortcuts that work across keyboard layouts:
```python
# Supports: Ctrl, Alt, Shift, Cmd (macOS)
# Keys: A-Z, 0-9, Function keys, special keys
dropdown.add_option("Save", save_func, accelerator="Ctrl+S")
dropdown.add_option("Quit", quit_func, accelerator="Alt+F4")
```

### Dynamic Control
Control menu items programmatically:
```python
option = dropdown.add_option("Toggle", checkable=True)

# Later in your code:
option.set_checked(True)    # Check the item
option.set_enabled(False)   # Disable the item
option.toggle_checked()     # Toggle check state
```

---

## Support & Issues

- **GitHub Issues**: [Report bugs or request features](https://github.com/KiTant/CTkMenuBarPlus/issues)
- **Discussions**: [Community support and questions](https://github.com/KiTant/CTkMenuBarPlus/discussions)

---

## Authors

- **Original Author**: [Akash Bora (Akascape)](https://github.com/Akascape) - CTkMenuBar 
- **Enhanced Features**: [xzyqox (KiTant)](https://github.com/KiTant) - Accelerators, icons, checkable items, context menus, etc
- **Base Dropdown**: [LucianoSaldivia](https://github.com/LucianoSaldivia) - Original dropdown implementation

---

## License

This project is licensed under the MIT License.

---

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "CTkMenuBarPlus",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "xzyqox <xzyqox@gmail.com>",
    "keywords": "customtkinter, menu, menubar, dropdown, gui, tkinter, accelerators, context-menu",
    "author": null,
    "author_email": "xzyqox <xzyqox@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/82/3c/d4164cf49e0d1162d6114a5f5a6a724a50cbfe2acc0e4f79b366d1331e07/ctkmenubarplus-1.0.tar.gz",
    "platform": null,
    "description": "# CTkMenuBarPlus\nModern menu bar widget library for customtkinter with enhanced features.\n\n## Features\n- Custom dropdown menus with full customization\n- Menu bar integration - add menus to window top or title bar\n- Keyboard shortcuts/accelerators - layout-independent key bindings\n- Icons in menu items - PNG, JPG, or PIL Image support\n- Checkable menu items - toggle states with visual feedback\n- Context menus - right-click dropdown support\n- Scrollable menus - automatic scrollbars for long option lists\n- Dynamic menu control - enable/disable items programmatically\n- Platform support - cross-platform (Windows title menu Windows-only)\n\n## Installation\n\n```bash\npip install CTkMenuBarPlus\n```\n\n---\n\n## Menu Types\n\n## 1. CTkMenuBar\n\n![menubar](https://github.com/Akascape/CTkMenuBar/assets/89206401/02c512b2-557f-4d59-86e0-a6eb9da3696c)\n\n### Usage\n```python\nfrom CTkMenuBarPlus import *\nimport customtkinter as ctk\n\nroot = ctk.CTk()\nmenu_bar = CTkMenuBar(root)\nfile_button = menu_bar.add_cascade(\"File\")\nedit_button = menu_bar.add_cascade(\"Edit\")\n```\n\n### Methods\n- **.add_cascade(text, postcommand, kwargs)**: Add new menu button to the bar\n- **.configure(kwargs)**: Update menu bar parameters\n- **.cget(param)**: Get configuration parameter value\n- **.show()**: Show the menu bar (if hidden)\n- **.hide()**: Hide the menu bar\n- **.toggle()**: Toggle menu bar visibility\n\n### Arguments\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| **master** | Widget | Parent widget (root or frame) |\n| **bg_color** | str/tuple | Background color (theme tuple or string) |\n| **height** | int | Menu bar height in pixels (default: 25) |\n| **width** | int | Menu button width in pixels (default: 10) |\n| **padx** | int | Horizontal spacing between buttons (default: 5) |\n| **pady** | int | Vertical padding (default: 2) |\n| **postcommand** | callable | Function called before showing dropdown |\n| ***other_args** | various | Additional CTkFrame parameters |\n\n---\n\n## 2. CTkTitleMenu\n\n_Windows Only - integrates with window title bar_\n\n![titlebar](https://github.com/Akascape/CTkMenuBar/assets/89206401/da6cd858-f700-476c-a2f0-93a1c6335a4d)\n\n### Usage\n```python\nfrom CTkMenuBarPlus import *\nimport customtkinter as ctk\n\nroot = ctk.CTk()\ntitle_menu = CTkTitleMenu(root)\nfile_button = title_menu.add_cascade(\"File\")\n```\n\n### Methods\n- **.add_cascade(text, kwargs)**: Add menu button to title bar\n- **.show()**: Show the title menu\n- **.hide()**: Hide the title menu  \n- **.toggle()**: Toggle title menu visibility\n\n### Arguments\n| Parameter | Type | Description                |\n|-----------|------|----------------------------|\n| **master** | CTk/CTkToplevel | Parent window (root or toplevel only) |\n| **title_bar_color** | str/int | Title bar color (\"default\" for auto theme) |\n| **padx** | int | Spacing between menu buttons (default: 10) |\n| **width** | int | Width of menu buttons (default: 10) |\n| **x_offset** | int | Horizontal position offset |\n| **y_offset** | int | Vertical position offset   |\n\n---\n\n## 3. CustomDropdownMenu\n\nCore dropdown menu class with enhanced features - used by both CTkMenuBar and CTkTitleMenu.\n\n### Usage\n```python\nfrom CTkMenuBarPlus import *\n\n# Attach to any widget\ndropdown = CustomDropdownMenu(widget=my_button)\ndropdown.add_option(\"Option 1\")\ndropdown.add_separator()\nsubmenu = dropdown.add_submenu(\"Submenu\")\nsubmenu.add_option(\"Sub Option\")\n```\n\n### Enhanced Usage with New Features\n```python\n# Keyboard shortcuts\ndropdown.add_option(\n    option=\"Open\", \n    command=open_file,\n    accelerator=\"Ctrl+O\"\n)\n\n# Checkable items\ndropdown.add_option(\n    option=\"Word Wrap\",\n    command=toggle_wrap,\n    checkable=True,\n    checked=True\n)\n\n# Icons in menu items\ndropdown.add_option(\n    option=\"Save\",\n    command=save_file,\n    icon=\"assets/save.png\",\n    accelerator=\"Ctrl+S\"\n)\n\n# Disabled items\ndropdown.add_option(\n    option=\"Advanced Settings\",\n    command=advanced_settings,\n    enabled=False\n)\n\n# Dynamic state control\noption_button = dropdown.add_option(\"Toggle Me\", checkable=True)\noption_button.set_checked(True)  # Set checked state\noption_button.set_enabled(False)  # Disable item\n```\n\n### Methods\n- **.add_option(option, command, kwargs)**: Add menu option with enhanced features\n- **.add_separator()**: Add visual separator line\n- **.add_submenu(submenu_name, kwargs)**: Add nested submenu\n- **.configure(kwargs)**: Update dropdown appearance\n- **.cget(param)**: Get configuration parameter\n- **.show()**: Show the dropdown menu\n- **.hide()**: Hide the dropdown menu\n- **.destroy()**: Clean up resources and destroy menu\n\n### Arguments\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| **widget** | Widget | - | Widget that triggers this dropdown |\n| **master** | Widget | None | Parent widget (auto-determined if None) |\n| **border_width** | int | 1 | Border width in pixels |\n| **width** | int | 150 | Menu width in pixels |\n| **height** | int | 25 | Menu item height in pixels |\n| **bg_color** | str/tuple | None | Background color |\n| **corner_radius** | int | 10 | Corner radius for rounded corners |\n| **border_color** | str/tuple | \"grey50\" | Border color |\n| **separator_color** | str/tuple | (\"grey80\", \"grey20\") | Separator line color |\n| **text_color** | str/tuple | (\"black\", \"white\") | Text color |\n| **fg_color** | str/tuple | \"transparent\" | Foreground color |\n| **hover_color** | str/tuple | (\"grey75\", \"grey25\") | Hover color |\n| **font** | CTkFont | (\"helvetica\", 12) | Font for menu text |\n| **padx** | int | 3 | Horizontal padding |\n| **pady** | int | 3 | Vertical padding |\n| **cursor** | str | \"hand2\" | Cursor type on hover |\n| **max_visible_options** | int | 10 | Options before scrollbar appears |\n| **enable_scrollbar** | bool | True | Enable scrollbar for long menus |\n| **scrollbar_width** | int | 16 | Scrollbar width in pixels |\n\n### add_option() Parameters\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| **option** | str | - | Text to display for this option |\n| **command** | callable | None | Function to call when selected |\n| **accelerator** | str | None | Keyboard shortcut (e.g., \"Ctrl+S\", \"Alt+F4\") |\n| **icon** | str/PIL.Image | None | Icon file path or PIL Image object |\n| **checkable** | bool | False | Whether item can be checked/unchecked |\n| **checked** | bool | False | Initial checked state (if checkable=True) |\n| **enabled** | bool | True | Whether item is initially enabled |\n| ***kwargs** | various | - | Additional CTkButton styling options |\n\n---\n\n## 4. ContextMenu\n\nRight-click context menu with full dropdown functionality.\n\n### Usage\n```python\nfrom CTkMenuBarPlus import *\n\n# Create context menu for any widget\ncontext_menu = ContextMenu(my_widget)\ncontext_menu.add_option(\"Copy\", copy_function, accelerator=\"Ctrl+C\")\ncontext_menu.add_option(\"Paste\", paste_function, accelerator=\"Ctrl+V\")\ncontext_menu.add_separator()\ncontext_menu.add_option(\"Delete\", delete_function, accelerator=\"Delete\")\n\n# Right-click will automatically show the menu\n```\n\n### Methods\nSame as CustomDropdownMenu - inherits all functionality plus:\n- **Automatic right-click binding** to target widget and children\n- **Cursor-position display** - appears where you right-click\n- **Full feature support** - accelerators, icons, checkable items, submenus\n\n### Arguments\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| **widget** | CTkBaseClass | Widget to attach context menu to |\n| ***kwargs** | various | All CustomDropdownMenu parameters supported |\n\n---\n\n## Theming\n\nCTkMenuBarPlus automatically adapts to customtkinter appearance modes:\n\n```python\n# Light/Dark mode support\nctk.set_appearance_mode(\"dark\")  # \"light\" or \"dark\"\n\n# Custom colors (theme tuples)\nmenu_bar = CTkMenuBar(\n    root,\n    bg_color=(\"white\", \"#2b2b2b\"),  # (light_mode, dark_mode)\n)\n\ndropdown = CustomDropdownMenu(\n    widget=button,\n    bg_color=(\"white\", \"#1a1a1a\"),\n    text_color=(\"black\", \"white\"),\n    hover_color=(\"lightblue\", \"#3a3a3a\")\n)\n```\n\n---\n\n## Error Handling\n\nThe library includes comprehensive error handling:\n\n```python\nfrom CTkMenuBarPlus import MenuWidgetBindingError, MenuCommandExecutionError\n\ntry:\n    dropdown.add_option(\"Test\", invalid_command)\nexcept MenuCommandExecutionError as e:\n    print(f\"Command error: {e}\")\n```\n\n**Custom Exception Classes:**\n- `CTkMenuBarError` - Base exception\n- `MenuWidgetBindingError` - Widget binding issues\n- `MenuCommandExecutionError` - Command execution problems  \n- `MenuToggleError` - Show/hide toggle failures\n- `MenuOptionError` - Menu option operations\n- `MenuIconError` - Icon loading/processing errors\n- `MenuPositioningError` - Menu positioning failures\n- `MenuScrollError` - Scrollable menu issues\n\n---\n\n## Advanced Features\n\n### Scrollable Menus\nLarge menus automatically get scrollbars:\n```python\ndropdown = CustomDropdownMenu(\n    widget=button,\n    max_visible_options=5,  # Show scrollbar after 5 items\n    enable_scrollbar=True,\n    scrollbar_width=16\n)\n```\n\n### Keyboard Accelerators\nLayout-independent shortcuts that work across keyboard layouts:\n```python\n# Supports: Ctrl, Alt, Shift, Cmd (macOS)\n# Keys: A-Z, 0-9, Function keys, special keys\ndropdown.add_option(\"Save\", save_func, accelerator=\"Ctrl+S\")\ndropdown.add_option(\"Quit\", quit_func, accelerator=\"Alt+F4\")\n```\n\n### Dynamic Control\nControl menu items programmatically:\n```python\noption = dropdown.add_option(\"Toggle\", checkable=True)\n\n# Later in your code:\noption.set_checked(True)    # Check the item\noption.set_enabled(False)   # Disable the item\noption.toggle_checked()     # Toggle check state\n```\n\n---\n\n## Support & Issues\n\n- **GitHub Issues**: [Report bugs or request features](https://github.com/KiTant/CTkMenuBarPlus/issues)\n- **Discussions**: [Community support and questions](https://github.com/KiTant/CTkMenuBarPlus/discussions)\n\n---\n\n## Authors\n\n- **Original Author**: [Akash Bora (Akascape)](https://github.com/Akascape) - CTkMenuBar \n- **Enhanced Features**: [xzyqox (KiTant)](https://github.com/KiTant) - Accelerators, icons, checkable items, context menus, etc\n- **Base Dropdown**: [LucianoSaldivia](https://github.com/LucianoSaldivia) - Original dropdown implementation\n\n---\n\n## License\n\nThis project is licensed under the MIT License.\n\n---\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 xzyqox\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "Modern menu bar widget library for customtkinter with enhanced features",
    "version": "1.0",
    "project_urls": {
        "Documentation": "https://github.com/KiTant/CTkMenuBarPlus#readme",
        "Homepage": "https://github.com/KiTant/CTkMenuBarPlus",
        "Issues": "https://github.com/KiTant/CTkMenuBarPlus/issues",
        "Repository": "https://github.com/KiTant/CTkMenuBarPlus"
    },
    "split_keywords": [
        "customtkinter",
        " menu",
        " menubar",
        " dropdown",
        " gui",
        " tkinter",
        " accelerators",
        " context-menu"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b0e1f88df79da027a41ee222069fa834f1f406804c3aef457c9e3243a5a160d1",
                "md5": "876fe25df4a2a27767feeba1f7dec0f2",
                "sha256": "7c0b2e906a93d4ea98dc5b7932b624c35fa54831092b6f8b0bbac12f946f56ef"
            },
            "downloads": -1,
            "filename": "ctkmenubarplus-1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "876fe25df4a2a27767feeba1f7dec0f2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 31560,
            "upload_time": "2025-08-09T15:53:07",
            "upload_time_iso_8601": "2025-08-09T15:53:07.685291Z",
            "url": "https://files.pythonhosted.org/packages/b0/e1/f88df79da027a41ee222069fa834f1f406804c3aef457c9e3243a5a160d1/ctkmenubarplus-1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "823cd4164cf49e0d1162d6114a5f5a6a724a50cbfe2acc0e4f79b366d1331e07",
                "md5": "06a65dba103d6b7c435a55cf9d61646f",
                "sha256": "0ab36a291d533f5e4ae405d6d3c2b153f49cd6a2016e8ddfcb2e835ade258beb"
            },
            "downloads": -1,
            "filename": "ctkmenubarplus-1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "06a65dba103d6b7c435a55cf9d61646f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 28929,
            "upload_time": "2025-08-09T15:53:09",
            "upload_time_iso_8601": "2025-08-09T15:53:09.106190Z",
            "url": "https://files.pythonhosted.org/packages/82/3c/d4164cf49e0d1162d6114a5f5a6a724a50cbfe2acc0e4f79b366d1331e07/ctkmenubarplus-1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-09 15:53:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "KiTant",
    "github_project": "CTkMenuBarPlus#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ctkmenubarplus"
}
        
Elapsed time: 1.65661s