用 Python 制作 AI 绘画利器:提示词生成器

Python制作AI绘画提示词生成器

🎨 用 Python 制作 AI 绘画利器:深度解析 wxPython 提示词生成器

随着 AI 绘画(如 Midjourney、Stable Diffusion)的兴起,如何写出精准、富有创意的提示词 (Prompt) 成了一门艺术。这份基于 wxPython 的桌面应用代码——“Nano Banana 提示词生成器”——提供了一个优雅的解决方案。
C:\pythoncode\new\prompt_generator.py

本文将深度解析这段代码,了解如何用 Python 的 GUI 库构建一个实用、复杂的工具,并学习提示词工程中的“结构化思维”。

一、项目概览与技术选型

这个项目的目标是提供一个结构化的图形用户界面(GUI),让用户能够通过点选和输入,按照预设的七个维度(主体、动作、服饰等)组合生成高质量的 AI 绘画提示词(中文和英文)。

核心技术栈

  1. wxPython: 用于构建桌面应用程序的 GUI 库。它提供了原生级别的外观和感觉,并且相比于 Tkinter 等更适合构建复杂、专业的应用界面。
  2. 结构化编程: 严格按照提示词的七个关键维度组织界面和逻辑,保证生成提示词的质量。
  3. 内嵌翻译逻辑: 实现了一个简化的中英翻译映射,方便用户获得直接可用于主流 AI 模型的英文提示词。

二、界面结构:wxPython 的布局之道

PromptGeneratorFrame 类是整个应用的核心。为了容纳七大模块海量的选项,开发者巧妙地使用了 wx.ScrolledWindow 实现了界面的可滚动性。

1. 主布局与美化

  • 主 Sizer (wx.BoxSizer(wx.VERTICAL)): 采用垂直布局,从上到下依次是标题、滚动区和结果区。
  • 滚动窗口 (wx.ScrolledWindow): 解决了内容过多导致的窗口溢出问题,确保所有选项都可访问。
  • 静态框 Sizer (wx.StaticBoxSizer): 这是代码中最具结构化的组件。每个提示词维度(如“① 主体描述”、“⑤ 光线/氛围”)都被封装在一个 StaticBoxSizer 内,标题清晰,边界明确,极大地提升了用户体验和模块化程度。

2. 交互控件的多样性

为了适应不同类型的提示词输入,代码使用了多种 wxPython 控件:

  • wx.Choice: 用于选择单项选项(如性别、年龄、镜头)。
  • wx.TextCtrl (单行/多行): 用于用户自定义输入(如面部特征、氛围描述)。
  • wx.CheckListBox: 专用于多选的标签列表(如光线类型、质量标签),允许用户灵活组合。

三、核心机制:翻译与错误修复

原代码中曾出现著名的 AttributeError,这也是大型 GUI 项目中常见的陷阱,但修复方式简洁而经典。

1. 关键修复:延迟初始化

原始错误是:self.translation_map = self._create_translation_map()__init__ 方法的开头被调用,但此时 self.gender_choice 等控件尚未创建。

解决方案:

self.translation_map = self._create_translation_map() 的调用,推迟到 __init__所有控件(包括 self.gender_choiceself.quality_checks)都已完成实例化之后。这确保了 _create_translation_map 运行时能够安全地访问所有必要的 GUI 属性。

2. 简易中英翻译逻辑 (_create_translation_map & _translate_to_en)

为了提供英文参考,代码实现了一个基于字典查找的简化翻译机制:

  • _create_translation_map:
    • 它遍历所有 wx.Choicewx.CheckListBox 控件。
    • 优先提取选项中括号内的英文(例如:“超现实主义摄影 (Hyperrealistic Photo)”)。
    • 对于没有括号的常用词,使用一个手动维护的 manual_map 字典进行硬编码翻译。
  • _translate_to_en:
    • 负责将生成的中文提示词字符串进行分词(以逗号 分隔)。
    • 它对常见的中文短语结构(如“一位…的…”或“穿着…”)进行模式匹配,并分别进行翻译,以保证英文语法相对自然(例如:一位年轻的女性 -> a young adult female)。
    • 对于无法结构化匹配的词,则使用映射表进行逐词替换。

⚠️ 注意: 这种方法比使用 API 翻译(如 Google Translate 或百度翻译)成本更低、速度更快,但翻译准确性依赖于维护的映射表和结构化规则,主要用于提示词的“参考”用途。

四、提示词的生命周期:生成、清空与复制

1. 生成提示词 (on_generate)

该方法是整个应用的核心引擎,体现了“提示词工程”的结构化思维。

  • 分段收集: 它按照七个维度(subject_parts, action_parts, style_parts, 等)分别收集用户选择或输入的关键词。
  • 智能过滤: 对于默认值(如“自定义”、“普通人”、“站立 - 正面”)或空输入,代码会跳过,避免生成冗余的提示词。
  • 中文组装: 使用中文逗号 将同一维度下的关键词连接起来,再将七个维度的结果连接起来,形成最终的中文提示词。
  • 英文输出: 调用 _translate_to_en 生成参考英文版本。

2. 辅助功能

  • on_clear: 完美实现了“一键清空”,它遍历所有 wx.TextCtrlwx.Choicewx.CheckListBox,将文本置空、选择项重置为 0、复选框全部取消选中,恢复应用的初始状态。
  • on_copy_cn / on_copy_en: 使用 wx.TheClipboard 接口,实现了将生成的提示词内容复制到系统剪贴板的功能,这是任何生产力工具不可或缺的特性。

五、运行结果

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值