用纯python构建虚拟dom用户界面的声明性库。

flybywire的Python项目详细描述


` flybywire是一个面向python的操作系统无关的声明式ui库,基于[sofi](https://github.com/tryexceptpass/sofi),灵感来自facebook的[react](https://facebook.github.io/react/)框架。这个实验的主要目标是在纯python中构建优雅的交互式ui,同时利用web技术。最终,“Flybywire”将使用类似[电子](http://electron.atom.io/)的内容,而不是使用Web浏览器来更好地控制渲染内容。

[![构建状态](https://travis-ci.org/thomasantony/flybywire.svg?branch=master)(https://travis ci.org/thomasantony/flybywire)
[![PYPI版本](https://badge.fury.io/py/flybywire.svg)(https://badge.fury.io/py/flybywire)

overview
--
所有视图逻辑都是用纯python编写的。“flybywire”不提供一组小部件,而是允许使用简单易读的语法以声明性的方式定义标准html标记和css之外的组件。

与react一样,视图被定义为状态函数。对状态的任何更改都会自动触发整个dom的重画。` flybywire`使用[virtual dom]库(https://github.com/matt-esch/virtual-dom)只更新实际修改过的dom部分。

它显示了一个简单的计数器,其值可以通过两个按钮来控制。

`` python
来自flybywire.core import app
来自flybywire.dom import h



def counterview(count):
“一个简单的无状态功能组件。”
返回h('h1',str(count))

类counterapp(app):
def init(self):
“初始化应用程序。”“
super()。\uu init\u35python 3.5中的self.set初始状态(0)

def render(self):
”“呈现给定应用程序状态的视图。”“
return h('div',
[计数器视图(count=self.state),
h('button','+',onclick”=自增量),
h('按钮','-',onclick=self.decrement)]



def increment(self,e):
“递增计数器。”
self.set_state(self.state+1)

def decrement(self,e):
“递减计数器。”
self.set_state(self.state-1)



app.start()
````

![Flybywire计数器演示](https://giant.gfycat.com/hilariouscarrefreeanchovy.gif)
示例也可以在“examples/counter.py”中找到。



关于组件的说明截至目前,您只能创建无状态的功能组件,这些组件只是简单的python函数。唯一可能的有状态组件是主“app”类。这一点很快就会改变,这样就有了一个单独的组件类,可以用来创建状态化组件,类似于它在react中是如何完成的。




bug、特性和注意事项
=-
-到目前为止,已经有了一个用于一些基本dom事件通信的系统。不过,目前还没有更“高级”的功能,例如为特定事件执行“event.preventDefault()”。欢迎提出公开此功能的想法!我可能会从[sofi](https://github.com/tryexceptpass/sofi)中添加一些命令式命令框架,这些命令框架是我最初从代码中删除的。

-一些简单的功能,例如在加载页面时聚焦文本框或在按enter后清除文本框,现在无法完成。可能有一些简单的方法可以解决这个问题,可能是在渲染时注入一些javascript。

-只要关闭浏览器窗口,服务器就会关闭。这是因为在不重新启动程序的情况下,无法立即重置应用程序状态。

-打开多个浏览器窗口也会导致一些奇怪的情况。这再次是由所有客户端共享的应用程序状态造成的。然而,一旦我们转向基于电子的架构,这在未来可能就不是问题了。一旦发生这种情况,将只有一个客户端连接到服务器,服务器生命周期将绑定到实际应用程序窗口的生命周期。

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

推荐PyPI第三方库


热门话题
固件文件的java容器:二进制数据部分的集合   java如何查找和跳过单词开头和结尾的特殊字符   JavaFXMaven插件:com。zenjava jfx:jar是否包含所有依赖项?   用户界面使Java Netbeans GUI生成器在读取文本文件的某些部分之前等待事件发生   由于Kotlin中存在未解析的引用,java无法设置文本或可绘制   java JSON解析嵌套数组对象   java如何使用Hibernate(EntityManager)或JPA调用Oracle函数或过程   链接列表末尾的java插入节点   jaxb EclipseLink Moxy:Java类型绑定不使用子类型(组合)   java为什么选择事件源模式中的事件流?   java为什么我的Eclipse项目与ClearCase没有关联?   通过Talend正确完成java数据库迁移   java如何自动调用数字键盘?   swing Java反射,投射到未知对象?   正则表达式如何在java中提取文本文件的键和值?   java rmi应用程序   线程“main”java中出现异常。lang.NoClassDefFoundError在我的测试中出现错误   java open失败:API 21中的EACCES(权限被拒绝)   java(RxJava)移植的Groovy方法不起作用   java AndroidStudio:如何在片段中移动按钮