Kivy的kivyredux Redux

kivyredux的Python项目详细描述


基维雷多克斯

kivyredux是一个python包,它允许在Kivy上实现Redux类似的实现,它的灵感来自于Kovak's redux implementation

安装

使用pip包管理器安装kivy redux包

pip install kivyredux

要求

kivyredux需要3.x或更高版本的python,即python>;=3.x

组件

  • 状态

    • ^{str1}$State对象允许您创建一个与dictionary类似的简单状态,但它将它们存储为属性
      • get从状态(实例方法)获取请求的属性
      • update更新状态中的特定属性(实例方法)
      • 静态方法
        • get_key获取状态对象中的公共属性
        • update_key更新state对象中的公共属性

  • 动作

    • ^{str1}$Action类允许为要映射的每个分派创建操作
      • 动作(动作类型,**数据由动作使用)
        • 动作所使用的数据是作为动作实例使用的数据字典创建的-动作数据@财产 ---默认为空字典
        • action_type-操作的标识符
  • 减速器

    • Reducer类允许您创建一个Reducer对象以传递到存储区以更新状态
      • 减速器(减速器内径、减速器cb)
        • 减速器_id减速器的唯一标识符 ---默认为随机字符串
        • 要与reducer实例关联的reducer_cb回调函数 ---默认为None
  • 存储

    • Store是一个公共的Store类,它允许处理与所有小部件及其属性绑定和映射以进行更新的连接
    • 仓库(减速机、州)
      • reducer是与回调关联的reducer的集合 --默认为空集合
      • state是存储将处理widget中的动作分派的状态,并将widget属性的状态映射为updated state ---默认为空状态对象
      • 实例方法

        • 连接(映射器、调度器、小部件)
          • mapper->;更新状态时控件属性的映射函数 ---默认为None
          • dispatcher—与小部件的属性绑定,并为任何属性分派操作 变化 ---默认为None
            • 函数参数->;dispatch_Function,widget
            • 返回函数
            ^{pr2}$ 在
          • widget—>;要绑定到存储的widget
        • 添加_-mapping_-binding(小部件、new_-mapper、new_-dispatcher、replace_-mapping、replace-_-binding)
          • widget—>;用于插入其他映射和绑定函数的widget
          • 新建映射器->新建映射函数 --默认为None
          • new_dispatcher->;新的调度函数,类似于connect函数 --默认为None
          • replace\u mapping—>;用新的映射替换现有的映射函数 ---默认为False
          • 替换\u binding->;取消绑定所有最初绑定的属性并绑定新调度的属性 ---默认为False
        • 增加减速器(新减速器) *新减速机->;要添加到减速机连接的新减速机 ---必须是Reducer类型

使用

#store.pyfromkivyreduximportState,Store,Action,Reducercommon_state=State(saying_hi=False,saying_bye=True)#Can also user [common_state={}]defsample_reducer(action,state=common_state):ifaction.type=='HI':previous_value=state.get('saying_hi')state.update('saying_hi',notprevious_value)elifaction.type=='BYE':previous_value=state.get('saying_bye')state.update('saying_bye',notprevious_value)else:passreturnstatehi_bye_reducer=Reducer(reducer_cb=sample_reducer)hi_action=Action(action_type='HI')bye_action=Action(action_type='BYE')common_store=Store(reducers=[hi_bye_reducer],state=common_state)#sample widget#hi_bye.kv'''#:kivy 1.1.0<HiClass>:    text:'HI' if self.hi else 'Bye'#Functional component cannot be specified with basic props#i.e.,#<ByeFunction>:#    color:[1,1,1,1] #doesn't work'''#hi.pyfromkivy.uix.labelimportLabelfromkivy.lang.builderimportBuilderfrom.storeimportcommon_store,hi_action,bye_action#class componentsBuilder.load_file('hi_bye.kv')classHi(Label):'''        Class component which inherits Label widget    '''__widget__='HiClass'# [IMPORTANT] to map with .kv file's namepassdefmapper(state,widget):#Maps Hiwidget.hi=state.get('saying_hi')defdispatcher(dispatch,widget):#dispatches hi actionreturn{'bind':{'hi':lambda*largs,**kwargs:dispatch(hi_action)},'init':{'hi':False}}HiClass=common_store.connect(mapper,dispatcher,Hi)#class component createddefbye_mapper(state,widget):#Maps byewidget.bye=state.get('saying_bye')defbye_dispatcher(dispatch,widget):#Dispatches bye actionreturn{'bind':{'bye':lambda*largs,**kwargs:dispatch(bye_action)},'init':{'bye':True}}defByeFunction(*largs,**kwargs):'''        Functional component which returns a Label widget    '''returnLabel(**kwargs)ByeFunction=cs.connect(bye_mapper,bye_dispatcher,ByeFunction)#Functional component created#main.pyfromkivy.appimportAppfromkivy.uix.boxlayoutimportBoxLayoutfrom.hiimportHiClass,ByeFunctionfromkivy.factoryimportFactoryclassHBContainer(BoxLayout):passclassHBApp(App):defbuild(self):Factory.register('ByeFunction',cls=ByeFunction)Factory.register('HiClass',cls=HiClass)returnHBContainer()#hb.kv'''<HBContainer>:    HiClass:    ByeFunction:        text:'Bye' if self.bye else 'Hi''''

许可证

MIT

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用唯一的按钮标签单击按钮   代码生成如何使用Java codeModel为数组的特定索引赋值   java如何批量执行Camel SQL插入   java iText 7将ltv添加到现有签名   内存管理Java应用程序突然停止几天后(810)   带MySQL的java注册表单JavaFX在intellij中失败   如何使用eclipse为windows azure java项目启用远程调试   一种通用的java输入输出设计模式   java Android XML(RSS)忽略引号(“”)   java帮助:安卓中的8 X 10 2维按钮数组   java启动Android项目   JWrapper构建java应用程序   java如何在Android应用程序中设置基于日期/时间的默认页面加载?   java循环程序在完成后返回到起点   java Hibernate:更好的整体类还是多类映射?   回溯数独解算器的递归问题[Java]   java查找类用法   java如何在SpringWebFlow中将多个模型绑定到一个视图?