Python结合wxPython实现AI绘图提示词生成器

 更新时间:2025年12月01日 08:46:44   作者:winfredzhang  
这篇文章主要为大家详细介绍了Python如何基于wxPython开发一个AI绘图提示词生成器,专门用于帮助用户快速构建和管理Stable Diffusion、Midjourney等AI绘图工具的提示词,感兴趣的小伙伴可以了解下

项目概述

这是一个基于wxPython开发的AI绘图提示词(Prompt)生成器,专门用于帮助用户快速构建和管理Stable Diffusion、Midjourney等AI绘图工具的提示词。程序提供了两种生成模式:随机生成和手动选择,极大提升了提示词创作效率。

运行结果如下:

核心功能

1. 双模式生成系统

随机生成模式

  • 用户设置每行抽取数量(1-5个词组)
  • 程序从每行随机选择指定数量的词组
  • 自动组合成完整的提示词

手动选择模式

  • 为每一行生成独立的下拉框
  • 实时预览选择效果
  • 支持空选项,灵活控制输出

2. 智能分类系统

程序能够自动识别提示词类型,并为每个下拉框添加有意义的分类标签:

def get_category_name(self, words):
    """根据词组内容推断分类名称"""
    first_words = ' '.join(words[:3]).lower()
    
    if any(kw in first_words for kw in ['masterpiece', 'quality', 'detailed']):
        return "画质质量"
    elif any(kw in first_words for kw in ['face', 'skin', 'eyes']):
        return "面部特征"
    # ... 更多分类逻辑

支持的分类包括:

  • 画质质量(masterpiece, 8k, HDR等)
  • 面部特征(perfect face, smooth skin等)
  • 光照效果(soft lighting, cinematic lighting等)
  • 赛博朋克(cyberpunk, neon lights等)
  • 景深效果(depth of field, bokeh等)
  • 背景设置(simple background, white background等)
  • 风格类别(anime style, oil painting, sketch等)
  • 人物特征(服装、发型等)
  • 场景环境(scenery, forest等)

3. 双语显示机制

这是程序的一大亮点:下拉框显示中英文,但输出纯英文

def translate_to_chinese(self, text):
    """将英文提示词翻译成中文"""
    translations = {
        'masterpiece': '杰作',
        'best quality': '最佳质量',
        'soft lighting': '柔和光照',
        # ... 50+个翻译条目
    }
    return translations.get(text, text)

实现原理:

  • 创建两个列表:combo_choices_display(显示用)和combo_choices_value(值用)
  • 显示格式:masterpiece (杰作)
  • 选择时获取索引,从值列表中提取纯英文
  • 最终输出:masterpiece, best quality, soft lighting
# 构建下拉框选项
for word in words:
    chinese = self.translate_to_chinese(word)
    display_text = f'{word} ({chinese})'  # 显示:英文(中文)
    combo_choices_display.append(display_text)
    combo_choices_value.append(word)  # 保存:纯英文

# 获取选择时使用英文值
english_value = combo.combo_values[selection_index]

技术架构详解

界面布局结构

Frame (主窗口)
├── Panel (主面板)
    ├── StaticText (输入区标签)
    ├── TextCtrl (memo1 - 多行输入框)
    ├── BoxSizer (控制区域)
    │   ├── SpinCtrl (数量选择器)
    │   ├── Button (随机生成)
    │   └── Button (生成下拉框)
    ├── ScrolledWindow (可滚动下拉框区域)
    │   └── BoxSizer (垂直布局)
    │       ├── BoxSizer (每行水平布局)
    │       │   ├── StaticText (分类标签)
    │       │   └── ComboBox (下拉选择框)
    │       └── ... (多行重复)
    ├── TextCtrl (memo2 - 只读输出框)
    └── Button (复制按钮)

核心类设计

class RandomWordPicker(wx.Frame):
    def __init__(self):
        # 初始化窗口和控件
        self.combo_boxes = []      # 存储所有下拉框
        self.line_data = []        # 存储每行的词组数据
        
    # 翻译系统
    def translate_to_chinese(self, text)
    
    # 分类识别
    def get_category_name(self, words)
    
    # 生成下拉框
    def on_create_combos(self, event)
    
    # 监听下拉框变化
    def on_combo_change(self, event)
    
    # 更新输出区域
    def update_memo2(self)
    
    # 随机生成
    def on_generate(self, event)
    
    # 复制到剪贴板
    def on_copy(self, event)

关键技术点

1. 动态创建控件

def on_create_combos(self, event):
    # 清空现有控件
    self.combo_sizer.Clear(True)
    self.combo_boxes = []
    
    # 动态创建每行的下拉框
    for i, line in enumerate(lines):
        words = [w.strip() for w in line.split(',') if w.strip()]
        
        # 创建布局和控件
        row_sizer = wx.BoxSizer(wx.HORIZONTAL)
        label = wx.StaticText(...)
        combo = wx.ComboBox(...)
        
        # 绑定事件
        combo.Bind(wx.EVT_COMBOBOX, self.on_combo_change)
        
        self.combo_boxes.append(combo)

要点:

  • 使用Clear(True)清空并销毁旧控件
  • 循环创建控件并绑定事件
  • 使用列表存储控件引用,便于后续访问

2. 实时更新机制

def on_combo_change(self, event):
    # 任何下拉框改变都触发此函数
    self.update_memo2()

def update_memo2(self):
    selected_words = []
    for combo in self.combo_boxes:
        selection_index = combo.GetSelection()
        if selection_index > 0:  # 跳过空选项
            english_value = combo.combo_values[selection_index]
            selected_words.append(english_value)
    
    result = ', '.join(selected_words)
    self.memo2.SetValue(result)

实现逻辑:

  • 所有下拉框共享同一个事件处理函数
  • 事件触发时遍历所有下拉框
  • 提取选中项的英文值
  • 组合成字符串更新到memo2

3. 随机生成算法

def on_generate(self, event):
    num_to_pick = self.spin_ctrl.GetValue()
    all_selected = []
    
    for line in lines:
        words = [w.strip() for w in line.split(',') if w.strip()]
        
        if len(words) < num_to_pick:
            selected = words  # 不足时全选
        else:
            selected = random.sample(words, num_to_pick)  # 随机抽取
        
        all_selected.extend(selected)
    
    result_text = ', '.join(all_selected)

特点:

  • 使用random.sample()保证不重复
  • 处理词组数量不足的边界情况
  • 按行顺序组合结果

4. 剪贴板操作

def on_copy(self, event):
    text = self.memo2.GetValue()
    
    if wx.TheClipboard.Open():
        wx.TheClipboard.SetData(wx.TextDataObject(text))
        wx.TheClipboard.Close()
        wx.MessageBox('已复制到剪贴板!', '成功', wx.OK | wx.ICON_INFORMATION)

wxPython剪贴板API:

  • wx.TheClipboard.Open() - 打开剪贴板
  • wx.TextDataObject(text) - 创建文本数据对象
  • SetData() - 设置数据
  • Close() - 关闭剪贴板

数据流程图

用户输入文本
    ↓
点击"生成下拉框"
    ↓
解析每行文本 → 分割词组 → 识别分类
    ↓
创建下拉框 + 添加翻译 → 绑定事件
    ↓
用户选择词组
    ↓
触发on_combo_change事件
    ↓
遍历所有下拉框 → 提取英文值
    ↓
更新memo2显示
    ↓
用户点击复制 → 写入剪贴板

使用场景示例

AI绘图工作流

步骤1:准备提示词库

masterpiece, best quality, ultra-detailed, 8k
anime style, cel shaded, flat color
soft lighting, natural light, cinematic lighting
red hair, vibrant red hair, detailed hair

步骤2:生成下拉框

  • 画质质量:masterpiece (杰作)
  • 动漫风格:anime style (动漫风格)
  • 光照效果:soft lighting (柔和光照)
  • 发型发色:red hair (红发)

步骤3:选择组合

点击下拉框选择想要的效果

步骤4:导出使用

masterpiece, anime style, soft lighting, red hair

复制到Stable Diffusion或Midjourney使用

扩展建议

1. 增加提示词权重

# 支持(word:1.2)格式
combo_choices_display.append(f'{word} ({chinese}) [权重]')

2. 保存/加载配置

def save_config(self):
    config = {
        'selections': [combo.GetSelection() for combo in self.combo_boxes]
    }
    with open('config.json', 'w') as f:
        json.dump(config, f)

3. 负面提示词支持

添加第二个memo区域用于生成negative prompts。

4. 预设模板系统

templates = {
    '人物肖像': ['masterpiece', 'perfect face', 'soft lighting'],
    '风景场景': ['scenery', 'detailed environment', 'natural light'],
}

5. 批量生成

添加循环生成功能,一次生成多组不同的提示词。

性能优化

1. 控件复用

对于频繁切换的场景,考虑复用控件而不是销毁重建:

# 只更新choices而不是重建控件
combo.Clear()
combo.Append(new_choices)

2. 延迟更新

用户快速切换下拉框时避免频繁更新:

def on_combo_change(self, event):
    if hasattr(self, 'update_timer'):
        self.update_timer.Stop()
    
    self.update_timer = wx.CallLater(300, self.update_memo2)

3. 虚拟滚动

当行数超过100时,考虑使用虚拟列表控件。

代码规范亮点

  • 清晰的职责分离:翻译、分类、UI逻辑分别封装
  • 防御性编程:处理空输入、边界情况
  • 用户友好:提供提示消息、默认值、示例数据
  • 数据与显示分离combo_values存储实际值,显示中英文

以上就是Python结合wxPython实现AI绘图提示词生成器的详细内容,更多关于Python AI绘图提示词生成器的资料请关注脚本之家其它相关文章!

相关文章

  • Python实现将json格式数据存储到Mysql数据库

    Python实现将json格式数据存储到Mysql数据库

    这篇文章主要为大家详细介绍了如何使用Python实现将json格式数据存储到Mysql数据库,文中的示例代码简洁易懂,有需要的小伙伴可以参考下
    2025-03-03
  • python实现数字炸弹游戏

    python实现数字炸弹游戏

    这篇文章主要为大家详细介绍了python实现数字炸弹游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 使用Python读写多个sheet文件

    使用Python读写多个sheet文件

    这篇文章主要介绍了使用Python读写多个sheet文件,本文即介绍多个sheet文件的读入及处理数据后写出到新excel文件的操作过程,可以提高大家工作效率,需要的小伙伴可以参考一下
    2022-05-05
  • Python实现.gif图片拆分为.png图片的简单示例

    Python实现.gif图片拆分为.png图片的简单示例

    有时候需要把GIF图片分解成一张一张的静态图,jpg或者png格式,下面这篇文章主要给大家介绍了关于Python实现.gif图片拆分为.png图片的相关资料,需要的朋友可以参考下
    2023-01-01
  • Python 数据类型中的字符串和数字

    Python 数据类型中的字符串和数字

    这篇文章主要介绍了Python 数据类型中的字符串和数字,Python3中有六个标准的数据类型,Number、String、List、Tuple、Set、Dictionary,加先来我们就来看看这几种数据类型的具体相关介绍,需要的小伙伴可以参考一下
    2022-02-02
  • Python正则表达式re.compile()和re.findall()详解

    Python正则表达式re.compile()和re.findall()详解

    re 模块提供了不少有用的函数,用以匹配字符串,下面这篇文章主要给大家介绍了关于Python正则表达式re.compile()和re.findall()的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python Conda安装包报错:PackagesNotFoundError两种解决方法

    Python Conda安装包报错:PackagesNotFoundError两种解决方法

    这篇文章主要给大家介绍了关于Python Conda安装包报错:PackagesNotFoundError的两种解决方法,这通常意味着安装程序正在寻找的环境包没有在 conda 的默认通道中找到,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Python使用scrapy采集数据过程中放回下载过大页面的方法

    Python使用scrapy采集数据过程中放回下载过大页面的方法

    这篇文章主要介绍了Python使用scrapy采集数据过程中放回下载过大页面的方法,可实现限制下载过大页面的功能,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 详解Python多线程

    详解Python多线程

    这篇文章主要为大家详细介绍了Python多线程的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Python生成可执行文件.exe操作完整流程记录

    Python生成可执行文件.exe操作完整流程记录

    .exe是文件扩展名,带有.exe扩展名的文件名按下Enter键就可运行,这篇文章主要给大家介绍了关于Python生成可执行文件.exe操作完整流程的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05

最新评论