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

用 Python 实现 Vue.js

  •  1
     
  •   zcf0508
    zcf0508 2022 年 5 月 27 日 4658 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本项目是按照霍春阳的 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 年 5 月 31 日

    声明式组件

    21 条回复    2022-06-15 12:03:12 +08:00
    zagfai
        1
    zagfai  
       2022 年 5 月 27 日
    用途是?做电脑应用?
    zcf0508
        2
    zcf0508  
    OP
       2022 年 5 月 27 日
    @zagfai 完成之后应该是可以的。

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

    https://github.com/fding/pyedifice
    iamzuoxinyu
        5
    iamzuoxinyu  
       2022 年 5 月 27 日 via Android
    vue native?
    zcf0508
        6
    zcf0508  
    OP
       2022 年 5 月 27 日
    @iamzuoxinyu 查了下好像已经不更新了。因为渲染引擎这块是独立的,和 Vue.js 一样,所以按理只要更换其它平台的渲染引擎,应该就可以跨端了。
    iamzuoxinyu
        7
    iamzuoxinyu  
       2022 年 5 月 27 日 via Android
    还真有叫 vue native 的东西啊...我是觉得你这项目跟 rn 思路一样,可能 rn 的话实现起来会更简单一些。
    zcf0508
        8
    zcf0508  
    OP
       2022 年 5 月 27 日
    @iamzuoxinyu 是的,从 SFC/jsx -> vdom -> dom 这个思路应该都差不多。
    sujin190
        9
    sujin190  
       2022 年 5 月 27 日   2
    其实想说 python 就应该用 python ,用啥字典啊,看起来费劲查起错来也费劲,你看 tensorfow 这种,抽象算法运行在非 python 引擎上也一样好好的用 python 语法多舒服,别照着表面画猫啊,一个好的语法、结构设计绝对是项目成功的一半
    yaphets666
        10
    yaphets666  
       2022 年 5 月 27 日 via iPhone
    牛批
    zcf0508
        11
    zcf0508  
    OP
       2022 年 5 月 27日
    @sujin190 是的,我也发现了,现在用字典写起来可难受了,后面有机会重构会写得更 Pythonic 一点。
    iamzuoxinyu
        12
    iamzuoxinyu  
       2022 年 5 月 27 日 via Android   1
    @zcf0508 不过说实话我不觉得用 pythons 实现有啥太大的优势,比如你这样写会缺少类型约束啥的,样式也是个大坑…而且看起来有点像 QML ?后续还会引入模板支持吗? Qt 本身也有 mvvm 支持,不过好像不太受欢迎的样子。
    嘛,我也是胡诌一通,你按你的思路写就是。
    zcf0508
        13
    zcf0508  
    OP
       2022 年 5 月 27 日
    @iamzuoxinyu 其实最开始是因为很多 tf 的模型都没有 tfjs 的版本,自己转的话,输入和输出适配又是大问题。如果直接用 python 写界面,那就简单了。
    lchynn
        14
    lchynn  
       2022 年 5 月 28 日
    能不能用 pyscript 这样的 wasm ? 做个 python for Web 的方便开发的前端框架算了。
    zcf0508
        15
    zcf0508  
    OP
       2022 年 5 月 28 日
    @lchynn 这何必呢,如果主要在网页端用,那直接用 js 写,然后用 pyscript 跑 python 相关的就好了。
    CokeMine
        16
    CokeMine  
       2022 年 5 月 28 日 via Android
    有趣
    jerry4718
        17
    jerry4718  
       2022 年 5 月 29 日 via Android
    建议 goscript 也提上日程
    yunyuyuan
        18
    yunyuyuan  
       2022 年 5 月 29 日
    吐槽一下,我觉得之所以 electron 很火,或者说 web 很火,最重要的原因是写 web 很轻松,css ,html 可以快速地描述 UI ,而 vue 作为 js 的加强,反而不是最具 web 特色的。如果 OP 能实现 html + css + python ,那着实牛逼
    GuguDan
        19
    GuguDan  
       2022 年 5 月 31 日
    zcf0508
        20
    zcf0508  
    OP
       2022 年 5 月 31 日
    追加了一个声名式组件的测试
    kele999
        21
    kele999  
       2022 年 6 月 15 日
    牛逼
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3373 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 13:14 PVG 21:14 LAX 06:14 JFK 09:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86