Skip to content

DataPlug开发日记 01

开发思想

  • MVP,最小化可运行功能,快速迭代。每次迭代都是可运行版本。
  • 使用AI进行vibe coding。

系统功能

应用可以根据config文件中数据,对txt\md\word等待替换文件中变量进行批量替换。变量规则符合jinja2语法。 如config.ini文件中有变量定义: company = Moomboss 在txt\md\word等文件中使用变量,则替换为Moomboss。

应用命令

暂定包括如下命令:

  • dataplug -h 显示帮助信息
  • dataplug -v 显示版本信息
  • dataplug about 显示关于信息
  • dataplug create <project_name> 创建项目
  • dataplug check [project_name] 检查项目(默认为当前目录)
  • dataplug fresh [project_name] 替换项目中待替换文件(默认为当前目录)
  • dataplug fresh [project_name] --config 使用指定配置文件替换文件中变量
  • dataplug log [project_name] 查看日志(默认为当前目录)
  • dataplug notification 更新通知

技术栈选择

想使用基于Python开发桌面应用的技术方案,网上可以搜索到的技术方案都太旧了。 以下是我尝试的桌面应用技术方案。 在最开始使用UI框架时,我考虑的是在UI内完成项目的创建、选择、配置文件编辑、文本预览等功能。但是在使用过程中,发现UI框架要实现本地文件的展示都很困难,比WinForm的开发麻烦了不止一点半点。

CustomTkinter

  • CustomTkinter是一个基于Tkintern的GUI开发框架。 但是当我看到连原生menu菜单都没有(需要tk的menu),我对这个UI框架深感疑虑。或许以后在cli版本完善后,可以考虑使用。

DearpyGui

(DearPyGui)[https://dearpygui.readthedocs.io/en/latest/index.html] 可以实现使用python开发桌面应用和web应用。 上来就给我当头一棒,当我用AI生成应用后,发现中文是乱码,按照网上搜索的方案进行本地字体的加载,发现字体模糊不清,影响体验。无情的抛弃之。

pywebview

(pywebview)[https://pywebview.flowrl.com/] 框架包含浏览器,可以使用python和javascript双向调用方式实现桌面应用。 但是我一直没想好UI怎样安排,调试了几个版本后黯然放弃。 现在先把cli做好,然后再考虑UI方案。

Cli方案

AI给我推荐了如下方案,最终我选择了Typer方案。先给程序员用,实际上写配置文件和基于jinja2语法编写变量,本身就是有门槛的事情。

  • argparse (Python 标准库)
import argparse

parser = argparse.ArgumentParser(description='示例CLI工具')
parser.add_argument('--input', '-i', required=True, help='输入文件')
parser.add_argument('--output', '-o', help='输出文件')
parser.add_argument('--verbose', '-v', action='store_true', help='详细模式')

args = parser.parse_args()
print(f"处理文件: {args.input}")
  • Click (最流行)
import click

@click.command()
@click.option('--input', '-i', required=True, help='输入文件')
@click.option('--output', '-o', help='输出文件')
@click.option('--verbose', '-v', is_flag=True, help='详细模式')
def cli(input, output, verbose):
    """示例CLI工具"""
    if verbose:
        click.echo(f"处理文件: {input}")
    click.echo("操作完成")

if __name__ == '__main__':
    cli()
  • Typer(基于类型提示,现代)
import typer

app = typer.Typer()

@app.command()
def process(input: str, output: str = None, verbose: bool = False):
    """处理文件的CLI工具"""
    if verbose:
        typer.echo(f"处理文件: {input}")
    typer.echo("操作完成")

if __name__ == "__main__":
    app()

V0.1

2025-09-18 使用AI完成项目框架结构,实现对txt、md等文本型文件的替换功能。经过pyinstall打包,运行良好😄。

Released under the Apache 2.0 License.