V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zcf0508
V2EX  ›  分享创造

用 Python 实现 Vue.js

  •  1
     
  •   zcf0508 ·
    zcf0508 · 2022-05-27 18:49:58 +08:00 · 3809 次点击
    这是一个创建于 895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本项目是按照霍春阳的 Vue.js 设计与实现,用 Python 实现其中的相关内容。

    项目地址

    Github: pyvue

    进度

    • √ computed
    • √ watch
    • √ reactive
    • √ ref
    • x renderer

    一些成果

    根据 vnode 生成 pyqt 界面 click 事件演示


    这是隔离在家期间开发的项目,初步完成了一些设想的功能,距离完成还有很多的工作,如果大家对这个项目感兴趣,欢迎 watch 和 star ,也欢迎大家提 issues 和 pr 。

    目前完成的 Renderer 还是个半成品,还需要设计 diff 算法来优化组件的更新。 再之后需要设计编译器和解码器,让项目能够以类似 Vue.js 的 SFC 模式进行开发。

    最后感谢大家的关心和支持~

    第 1 条附言  ·  2022-05-31 17:03:54 +08:00

    声明式组件

    21 条回复    2022-06-15 12:03:12 +08:00
    zagfai
        1
    zagfai  
       2022-05-27 19:45:57 +08:00
    用途是?做电脑应用?
    zcf0508
        2
    zcf0508  
    OP
       2022-05-27 19:48:55 +08:00
    @zagfai 完成之后应该是可以的。

    而且和 Vue.js 一样,渲染引擎是可以换的,但是我不清楚 python 的其它 UI 库,目前用的 PyQt ,拿来做桌面应用应该会比 electron 性能好一些。不过好像 PyQt 做出来的不咋好看。
    jolanyu
        3
    jolanyu  
       2022-05-27 19:50:27 +08:00
    pyqt 能不能做点像组件库一样的东西
    zcf0508
        4
    zcf0508  
    OP
       2022-05-27 20:14:03 +08:00
    @jolanyu 之前有关注到一个叫 Edifice 的库,看介绍感觉样式挺好看的,后面可能整合一下试试。

    https://github.com/fding/pyedifice
    iamzuoxinyu
        5
    iamzuoxinyu  
       2022-05-27 20:19:07 +08:00 via Android
    vue native?
    zcf0508
        6
    zcf0508  
    OP
       2022-05-27 20:25:10 +08:00
    @iamzuoxinyu 查了下好像已经不更新了。因为渲染引擎这块是独立的,和 Vue.js 一样,所以按理只要更换其它平台的渲染引擎,应该就可以跨端了。
    iamzuoxinyu
        7
    iamzuoxinyu  
       2022-05-27 20:30:41 +08:00 via Android
    还真有叫 vue native 的东西啊...我是觉得你这项目跟 rn 思路一样,可能 rn 的话实现起来会更简单一些。
    zcf0508
        8
    zcf0508  
    OP
       2022-05-27 20:33:56 +08:00
    @iamzuoxinyu 是的,从 SFC/jsx -> vdom -> dom 这个思路应该都差不多。
    sujin190
        9
    sujin190  
       2022-05-27 20:39:40 +08:00   ❤️ 2
    其实想说 python 就应该用 python ,用啥字典啊,看起来费劲查起错来也费劲,你看 tensorfow 这种,抽象算法运行在非 python 引擎上也一样好好的用 python 语法多舒服,别照着表面画猫啊,一个好的语法、结构设计绝对是项目成功的一半
    yaphets666
        10
    yaphets666  
       2022-05-27 20:41:28 +08:00 via iPhone
    牛批
    zcf0508
        11
    zcf0508  
    OP
       2022-05-27 20:44:16 +08:00
    @sujin190 是的,我也发现了,现在用字典写起来可难受了,后面有机会重构会写得更 Pythonic 一点。
    iamzuoxinyu
        12
    iamzuoxinyu  
       2022-05-27 20:52:01 +08:00 via Android   ❤️ 1
    @zcf0508 不过说实话我不觉得用 pythons 实现有啥太大的优势,比如你这样写会缺少类型约束啥的,样式也是个大坑…而且看起来有点像 QML ?后续还会引入模板支持吗? Qt 本身也有 mvvm 支持,不过好像不太受欢迎的样子。
    嘛,我也是胡诌一通,你按你的思路写就是。
    zcf0508
        13
    zcf0508  
    OP
       2022-05-27 20:56:28 +08:00
    @iamzuoxinyu 其实最开始是因为很多 tf 的模型都没有 tfjs 的版本,自己转的话,输入和输出适配又是大问题。如果直接用 python 写界面,那就简单了。
    lchynn
        14
    lchynn  
       2022-05-28 14:55:29 +08:00
    能不能用 pyscript 这样的 wasm ? 做个 python for Web 的方便开发的前端框架算了。
    zcf0508
        15
    zcf0508  
    OP
       2022-05-28 15:12:56 +08:00
    @lchynn 这何必呢,如果主要在网页端用,那直接用 js 写,然后用 pyscript 跑 python 相关的就好了。
    CokeMine
        16
    CokeMine  
       2022-05-28 17:33:22 +08:00 via Android
    有趣
    jerry4718
        17
    jerry4718  
       2022-05-29 01:42:40 +08:00 via Android
    建议 goscript 也提上日程🥲
    yunyuyuan
        18
    yunyuyuan  
       2022-05-29 12:41:15 +08:00
    吐槽一下,我觉得之所以 electron 很火,或者说 web 很火,最重要的原因是写 web 很轻松,css ,html 可以快速地描述 UI ,而 vue 作为 js 的加强,反而不是最具 web 特色的。如果 OP 能实现 html + css + python ,那着实牛逼
    GuguDan
        19
    GuguDan  
       2022-05-31 09:35:43 +08:00
    zcf0508
        20
    zcf0508  
    OP
       2022-05-31 17:17:21 +08:00
    追加了一个声名式组件的测试
    kele999
        21
    kele999  
       2022-06-15 12:03:12 +08:00
    牛逼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5369 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:25 · PVG 09:25 · LAX 17:25 · JFK 20:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.