用纯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。
-只要关闭浏览器窗口,服务器就会关闭。这是因为在不重新启动程序的情况下,无法立即重置应用程序状态。
-打开多个浏览器窗口也会导致一些奇怪的情况。这再次是由所有客户端共享的应用程序状态造成的。然而,一旦我们转向基于电子的架构,这在未来可能就不是问题了。一旦发生这种情况,将只有一个客户端连接到服务器,服务器生命周期将绑定到实际应用程序窗口的生命周期。
[![构建状态](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)
````
![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。
-只要关闭浏览器窗口,服务器就会关闭。这是因为在不重新启动程序的情况下,无法立即重置应用程序状态。
-打开多个浏览器窗口也会导致一些奇怪的情况。这再次是由所有客户端共享的应用程序状态造成的。然而,一旦我们转向基于电子的架构,这在未来可能就不是问题了。一旦发生这种情况,将只有一个客户端连接到服务器,服务器生命周期将绑定到实际应用程序窗口的生命周期。