跳转到主要内容

Kivy的上下文和应用程序菜单

项目描述

Kivy上下文菜单

用于轻松创建上下文和应用程序菜单的类集合。

有关如何使用kyv garden flowers的说明,请参阅花园 说明

花信息

上下文菜单

Example of context menu

上下文菜单由包装所有菜单项的ContextMenu小部件表示。上下文菜单可以嵌套,每个ContextMenuTextItem最多可以包含一个ContextMenu小部件。

import kivy
from kivy.app import App
from kivy.lang import Builder
import kivy_garden.contextmenu

kv = """
FloatLayout:
    id: layout
    Label:
        pos: 10, self.parent.height - self.height - 10
        text: "Left click anywhere outside the context menu to close it"
        size_hint: None, None
        size: self.texture_size

    Button:
        size_hint: None, None
        pos_hint: {"center_x": 0.5, "center_y": 0.8 }
        size: 300, 40
        text: "Click me to show the context menu"
        on_release: context_menu.show(*app.root_window.mouse_pos)

    ContextMenu:
        id: context_menu
        visible: False
        cancel_handler_widget: layout

        ContextMenuTextItem:
            text: "SubMenu #2"
        ContextMenuTextItem:
            text: "SubMenu #3"
            ContextMenu:
                ContextMenuTextItem:
                    text: "SubMenu #5"
                ContextMenuTextItem:
                    text: "SubMenu #6"
                    ContextMenu:
                        ContextMenuTextItem:
                            text: "SubMenu #9"
                        ContextMenuTextItem:
                            text: "SubMenu #10"
                        ContextMenuTextItem:
                            text: "SubMenu #11"
                        ContextMenuTextItem:
                            text: "Hello, World!"
                            on_release: app.say_hello(self.text)
                        ContextMenuTextItem:
                            text: "SubMenu #12"
                ContextMenuTextItem:
                    text: "SubMenu #7"
        ContextMenuTextItem:
            text: "SubMenu #4"
"""

class MyApp(App):
    def build(self):
        self.title = 'Simple context menu example'
        return Builder.load_string(kv)

    def say_hello(self, text):
        print(text)
        self.root.ids['context_menu'].hide()

if __name__ == '__main__':
    MyApp().run()

表示项目具有子菜单的箭头将自动创建。《ContextMenuTextItem》继承自ButtonBehavior,因此您可以使用on_release将其绑定到操作。

根上下文菜单可以使用cancel_handler_widget参数。这向其中添加了on_touch_down事件,当您在菜单外部点击时,它会关闭菜单。

应用程序菜单

Example of application menu

创建应用程序菜单与上下文菜单非常相似。使用 AppMenuAppMenuTextItem 小部件来创建顶级菜单。然后每个 AppMenuTextItem 都可以包含一个 ContextMenu 小部件,就像我们上面看到的。默认情况下,没有 ContextMenuAppMenuTextItem 被禁用。

import kivy
from kivy.app import App
from kivy.lang import Builder
import kivy_garden.contextmenu

kv = """
FloatLayout:
    id: layout
    AppMenu:
        id: app_menu
        top: root.height
        cancel_handler_widget: layout

        AppMenuTextItem:
            text: "Menu #1"
            ContextMenu:
                ContextMenuTextItem:
                    text: "Item #11"
                ContextMenuTextItem:
                    text: "Item #12"
        AppMenuTextItem:
            text: "Menu Menu Menu #2"
            ContextMenu:
                ContextMenuTextItem:
                    text: "Item #21"
                ContextMenuTextItem:
                    text: "Item #22"
                ContextMenuTextItem:
                    text: "ItemItemItem #23"
                ContextMenuTextItem:
                    text: "Item #24"
                    ContextMenu:
                        ContextMenuTextItem:
                            text: "Item #241"
                        ContextMenuTextItem:
                            text: "Hello, World!"
                            on_release: app.say_hello(self.text)
                        # ...
                ContextMenuTextItem:
                    text: "Item #5"
        AppMenuTextItem:
            text: "Menu Menu #3"
            ContextMenu:
                ContextMenuTextItem:
                    text: "SubMenu #31"
                ContextMenuDivider:
                ContextMenuTextItem:
                    text: "SubMenu #32"
                # ...
        AppMenuTextItem:
            text: "Menu #4"
    # ...
    # The rest follows as usually
"""

class MyApp(App):
    def build(self):
        self.title = 'Simple app menu example'
        return Builder.load_string(kv)

    def say_hello(self, text):
        print(text)
        self.root.ids['app_menu'].close_all()

if __name__ == '__main__':
    MyApp().run()

安装

pip install kivy_garden.contextmenu

用法

所有类

garden.contextmenu 为您提供了一组类和混合类,用于创建自己的自定义上下文和应用菜单项。

context_menu.AbstractMenu

表示所有菜单基本功能的混合类。它不能单独使用,需要通过布局进行扩展。提供 cancel_handler_widget 属性。参见 AppMenuContextMenu

context_menu.ContextMenu

上下文菜单的实现。

context_menu.AbstractMenuItem

表示单个菜单项的混合类。需要扩展才能具有任何实用性。它是上下文和应用菜单所有菜单项的基类。

如果您想扩展此类,您需要重写 content_width 属性,它告诉父 ContextMenu 此项预期的宽度。它需要知道这一点来设置它自己的宽度。

context_menu.ContextMenuItem

单个上下文菜单项。如果包含 ContextMenu 子项,则自动绘制箭头。如果您想创建自定义菜单项,请扩展此类。

context_menu.AbstractMenuItemHoverable

混合类,它使继承自 ContextMenuItem 的任何类在鼠标悬停时改变背景颜色。

context_menu.ContextMenuText

带有 Label 小部件的菜单项,没有任何额外功能。

context_menu.ContextMenuDivider

菜单小部件,用于分割上下文/应用菜单的两个部分。

Example of ContextMenuDivider without text

它还包含一个 Label 实例,如果您没有设置任何文本,则不可见。

ContextMenuTextItem:
    text: "SubMenu #33"
ContextMenuDivider:
    text: "More options"
ContextMenuTextItem:
    text: "SubMenu #34"

Example of ContextMenuDivider with text

context_menu.ContextMenuTextItem

带有文本的菜单项。您在大多数情况下都可以使用此类来创建所有菜单项。您还可以在 所有示例中 看到它的使用。包含一个 Label 小部件,并自动将 textfont_sizecolor 属性复制到它。

app_menu.AppMenu

应用程序菜单小部件。默认情况下,它填充父容器的整个宽度。

app_menu.AppMenuTextItem

应用程序菜单项宽文本。包含一个 Label 小部件,并自动将 textfont_sizecolor 属性复制到它。

贡献

查看我们的 贡献指南,并随意改进这个项目。

许可

本软件根据 MIT 许可证发布。请参阅 LICENSE.txt 文件。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

kivy_garden.contextmenu-0.1.0.dev1.tar.gz (11.0 kB 查看哈希值)

上传时间 源代码

构建分发

kivy_garden.contextmenu-0.1.0.dev1-py3-none-any.whl (11.0 kB 查看哈希值)

上传时间: Python 3