-
-
Notifications
You must be signed in to change notification settings - Fork 127
菜单组件
Leslie Van edited this page Apr 24, 2023
·
3 revisions
主要由四个类组成,分别是:
- 接口类
MenuComponent
- 主菜单
Menu
- 子菜单
SubMenu
- 菜单项
MenuItem
classDiagram
class MenuComponent {
+__init__()
+add(component)
+get_parent()
+set_parent(component)
+remove(component)
+display()
+display_item()
+is_leaf()
}
class Menu {
+__init__(name)
+get_parent()
+set_parent(component)
+add(component)
+remove(component)
+display()
-name: str
-components: list
}
class SubMenu {
+__init__(name)
+get_parent()
+set_parent(component)
+add(component)
+remove(component)
+set_value_getter(config, getter)
+get_value()
+set_compare_method(method)
+check_active()
+get_active_item()
+display()
-name: str
-components: list
-source: Any
-getter: callable
-is_active: int | None
-compare_method: callable
}
class MenuItem {
+__init__(name)
+get_active_item()
+add(component)
+get_value()
+remove(component)
+display()
+set_procedure(procedure, \*\*kwargs)
+run()
+is_leaf()
-_name: str
-_procedure: callable
-_procedure_args: dict|None
-_value: str|None
}
MenuComponent <|-- Menu
MenuComponent <|-- SubMenu
MenuComponent <|-- MenuItem
classDiagram
class MenuComponent {
+__init__()
+get_parent()
+set_parent(component)
+add(component)
+remove(component)
+display()
+display_item()
+is_leaf()
}
它是一个基类,提供了基础的接口,用于定义菜单组件的行为。该类声明了一些方法,包括添加、获取和移除子项、设置和获取父项、显示菜单、显示菜单条目、判断是否为叶子节点等。
classDiagram
class Menu {
+__init__(name)
+get_parent()
+set_parent(component)
+add(component)
+remove(component)
+display()
-name: str
-components: list
}
Menu
类是一个具体的菜单组件类,继承自 MenuComponent
类,表示主菜单。该类具有添加、移除和显示子菜单、显示菜单等基本行为。其中,add
方法用于添加子菜单组件,remove
方法用于移除子菜单组件,display
方法用于打印子菜单条目。
classDiagram
class SubMenu {
+__init__(name)
+get_parent()
+set_parent(component)
+add(component)
+remove(component)
+set_value_getter(config, getter)
+get_value()
+set_compare_method(method)
+check_active()
+get_active_item()
+display()
-name: str
-components: list
-source: Any
-getter: callable
-is_active: int | None
-compare_method: callable
}
SubMenu
类是一个具体的菜单组件类,继承自 MenuComponent
类,表示子菜单。该类具有添加、移除和显示菜单项、设置和获取子菜单当前值、检查并更新当前选中项等基本行为。其中,add
和 remove
方法用于添加或移除菜单项,display
方法用于打印完整的子菜单选项。同时,该类还提供若干个具体的处理方法,用于获取或更新子菜单当前值,判断当前选中项等。
classDiagram
class MenuItem {
+__init__(name)
+get_active_item()
+add(component)
+get_value()
+remove(component)
+display()
+set_procedure(procedure, \*\*kwargs)
+run()
+is_leaf()
-_name: str
-_procedure: callable
-_procedure_args: dict|None
-_value: str|None
}
MenuItem
类是一个具体的菜单组件类,继承自 MenuComponent
类,表示菜单项。该类主要有设置和获取菜单项信息、获取菜单项值、执行菜单项的处理方法等基本行为。其中,set_procedure
方法用于设置菜单项的处理方法,run
方法用于执行菜单项的处理方法。同时,该类还实现了 is_leaf
方法,用于判断是否为叶子节点。
下面是一个简单的菜单示例,演示了如何创建一个简单的菜单,包含一个主菜单和一个子菜单,子菜单下有两个菜单项。通过注释可以清晰地了解每一步的作用和意义。
# 创建一个主菜单,名称为“当前设置”,空格用于缩进,使其在菜单中居中显示。
root_menu = Menu(' 当前设置')
# 在主菜单中创建一个名为“logo”的子菜单
logo_menu = SubMenu('logo')
# 两个参数结合,表示读取 config['logo']['enable'] 作为子菜单当前选中的值
logo_menu.set_value_getter(config, lambda x: x['logo']['enable'])
# 设置子菜单当前选中的值和菜单项的值的比较方法
logo_menu.set_compare_method(lambda x, y: x == y)
root_menu.add(logo_menu) # 将子菜单添加到主菜单中
# 在子菜单中创建名为“启用”的菜单项,值为 True,并设置其对应的处理方法。
logo_enable_menu = MenuItem('启用')
logo_enable_menu._value = True # 用于和子菜单当前选中的值进行比较,如果相等则表示选中启用
logo_enable_menu.set_procedure(config.enable_logo) # 修改配置文件,启用 logo
logo_menu.add(logo_enable_menu) # 将菜单项添加到子菜单中
# 在子菜单中创建名为“不启用”的菜单项,值为 False,并设置其对应的处理方法。
logo_disable_menu = MenuItem('不启用')
logo_disable_menu._value = False # 用于和子菜单当前选中的值进行比较,如果相等则表示选中不启用
logo_disable_menu.set_procedure(config.disable_logo) # 修改配置文件,禁用 logo
logo_menu.add(logo_disable_menu) # 将菜单项添加到子菜单中
菜单组件在 init.py 中被实例化,菜单组件的定义在 entity/menu.py。