开发说明\|指南
==============

此文件旨在使后期欲参与开发之人员减轻其开发负担，同时也为了我们正在开发的人员详细说明功能与用法
掌握开发指南之后，在调用函数等的过程中将会更加方便

文件结构
--------

从主文件调用display.py以实现显示，调用functions.py以使用功能

functions.py中会调取./addon/目录下的全部功能文件，这些功能文件必须先由./addon/addons.pkl来预先定义好

详细说明
--------

### msctLib

用于支持主要功能

#### display.py

1.  class disp

    -   参数

        1.  `**kwgs`对窗口的基础设定 `{ '组件名称' : 函数自设定 }` 例如：

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python
                {
                    'version': '0.0.1',  # version指的是当前配置格式的版本
                    'title': "音·创",
                    'geometry': '1200x900',
                    'iconbitmap': ('./resources/musicreater.ico', './resources/musicreater.ico'),
                    'menu' : {  #对setMenu有特殊说明
                        '文件': {
                            '新建': <function>,
                            '打开': <function>,
                        },
                    },
                    'widget': { #对窗口部件又详细说明
                        'wordview':{
                            'text':'言·论',
                        },
                        'settingbox':{}, #后文详细说明
                        'tracklist':{},
                        'operation':{},
                        'map':{},
                    },
                }
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    -   变量

        1.  root
            窗口根，即一个Tk类，注意，外部调用请不要直接访问窗口根
            因为这可不一定是Tk的类，加载其他窗口组件的话就是其他的
            了。
        2.  title
            窗口标题，字符串
        3.  menuWidgets
            对于窗口菜单的设定，其格式详见下方`setMenu`函数
        4.  wordView
            显示在言论上的文字，字符串
        5.  buttons
            快捷功能按钮的列表，列表的元素为字典，字典的键是按钮的名称，值为一个元组，元组中含有两个元素，其中元组的第1个元素为按钮图标，是一个图片的路径；第2个元素为执行的函数，其值应当是一个函数对象。
            ```python
            button: list = [ # 操作按钮部分
                dict = {
                    按钮名称 : tuple(按钮图标,执行函数)
                },
            ],
            ```
        6.  


    -   函数

        1.  `setMenu`对菜单的基础设定

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python
                {
                    菜单名 : {
                        选项名 : 选项函数
                    }
                }
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            注： 
            `菜单名` : `str` 显示在菜单上的字符串
            `选项名` : `str` 显示在菜单选项上的字符串
            `选项函数` : `function` 菜单调取的函数(无返回值，无入参)
            当 `选项名` 的布尔值判定为 `False` 的时候，无论 `选项函数` 为何，皆插入一段分割线，但 `选项函数` 不得为空

        2.  `setWidget`对窗口部件的放置 
            ```python
                wordview: dict = { #言论部分显示的字样
                    'text': str = 显示内容,
                    # ... 即可用 tk.Label 的参数
                },
                button: list = [ 
                    dict = {
                        按钮名称 : tuple(按钮图标,执行函数)
                    },
                ],
                settingbox: list = [ #设置部分显示的字样及其对应的设置函数
                    (
                        设置名称:str,
                        值类型:tuple,
                        显示内容:str,
                        设置操作函数:<function>,
                    )
                ],
                map: list = [
                    音符数据
                ]
            ```
            注：

            上文中，值类型可以是如下几个项
            1.  `('str',)` 字符串类型，使用文本框输入数据
            2.  `('bool',)` 布尔类型，使用复选框输入数据
            3.  `('num',最小值:int,最大值:int,步长:int = 1)` 数值类型，使用数值滑动条输入数据
            4.  `('list',列表项:list)` 单选类型，即列表中多选一，使用单选框输入数据
            
            值得注意的是，在kwgs中修改的部件设置，可以在其变量中读取或热修改，对应的变量如下

            | 参数        | 对应类中的变量 | 变量类型 | 说明 |
            |------------|------------------|---------------------------|---------------------|
            | wordview   | wordview         | str                       | 显示在 言·论 区域的文字   |
            | button     | button           | list[dict{}]              | 操作按钮              |
            | settingbox | settings         | list[ Any ]               | 设置项目中的值        |
            | tracklist  | tracknum         | tuple(int,int)            | 当前选择到的音轨与音轨总数|
            | map        | notes            | list[ class Note ]        | 当前的音符列表        |







                    # 这里是全局设置
                    'name' : str, #项目名，即包名
                    'title': str, #音乐名称
                    'repeation': bool, #是否开启重复播放
                    'player_selection': str, #玩家选择器，用于选择播放的的玩家
                    # 下面是音轨独立设置
                    'track_name': str, #此音轨的名字
                    'track_sbname': str, #此音轨所使用的计分板
    -   变量
        使用类中的变量可以对类中的内容进行实时修改
