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

oneFace: 根据 Python 函数同时生成 CLI, GUI 和 Web app 的包

  •  
  •   Nanguage ·
    Nanguage · 2022-03-21 15:44:37 +08:00 · 1744 次点击
    这是一个创建于 976 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可以通过一个 Python 函数同时生成 CLI, Qt GUI 和 Dash web app 。只需要把函数参数进行类型与范围标记即可,比如:

    from oneface import one, Arg
    
    @one
    def bmi(name: Arg(str),
            height: Arg(float, [100, 250]) = 160,
            weight: Arg(float, [0, 300]) = 50.0):
        BMI = weight / (height / 100) ** 2
        print(f"Hi {name}. Your BMI is: {BMI}")
        return BMI
    
    
    # run cli
    bmi.cli()
    # or run qt_gui
    bmi.qt_gui()
    # or run dash web app
    bmi.dash_app()
    

    上述代码能够产生三种不同的接口:

    CLI Qt GUI Dash web app
    cli qt dash

    其他特性

    • 传入参数类型与范围检查,以及 pretty print
    • 参数类型扩展

    用途与局限性

    以一种非常简单的方式为程序提供接口,比如把函数直接变成 Web app ,提供给不会跑命令行的人使用。局限性是只适合创建简单(没有交互状态)的界面。

    链接

    类似项目

    • Fire: 根据函数生成 CLI 。
    • Gooey: 以 CLI 的方式创建 GUI 。
    8 条回复    2022-03-22 10:24:45 +08:00
    JeffersonQin
        1
    JeffersonQin  
       2022-03-21 17:57:41 +08:00
    有个建议,感觉这个项目想法很好,但是如果用 GPL 授权估计会劝退很多人 .... 比方说我
    l0wkey
        2
    l0wkey  
       2022-03-21 18:17:37 +08:00 via iPhone
    支持图片或文件选择操作不
    lzs5240
        3
    lzs5240  
       2022-03-21 18:20:18 +08:00
    Good
    lzs5240
        4
    lzs5240  
       2022-03-21 18:21:30 +08:00
    @l0wkey 附议 图片 文件 Excel 等
    Nanguage
        5
    Nanguage  
    OP
       2022-03-21 20:17:16 +08:00
    @JeffersonQin 我会考虑一下的,习惯用 GPL 了
    Nanguage
        6
    Nanguage  
    OP
       2022-03-21 20:18:40 +08:00
    @l0wkey 文件选择在 Qt 端支持。图片可以通过 path 传入,如果有其他需求可以扩展。
    ipwx
        7
    ipwx  
       2022-03-22 10:17:36 +08:00
    提个小建议:类型声明用 Arg 挺不友好。。。

    建议考虑用 dataclass 包一层,或者参考 Pydantic 。尽量用内置变量 比如 int 和默认值推断你的界面
    Nanguage
        8
    Nanguage  
    OP
       2022-03-22 10:24:45 +08:00
    @ipwx 谢谢你的建议!这是一个很好的改进方向
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:09 · PVG 05:09 · LAX 13:09 · JFK 16:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.