文章目录
- 随机生成模式 用户设置每行抽取数量(1-5个词组) 程序从每行随机选择指定数量的词组 自动组合成完整的提示词 手动选择模式 为每一行生成独立的下拉框 实时预览选择效果 支持空选项,灵活控制输出
- 程序能够自动识别提示词类型,并为每个下拉框添加有意义的分类标签: 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等)
- 这是程序的一大亮点:下拉框显示中英文,但输出纯英文。 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)
-
- 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)清空并销毁旧控件 循环创建控件并绑定事件 使用列表存储控件引用,便于后续访问
- 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
- 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()保证不重复 处理词组数量不足的边界情况 按行顺序组合结果
- 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() – 关闭剪贴板
- # 支持(word:1.2)格式 combo_choices_display.append(f'{word} ({chinese}) [权重]’)
- 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)
- 添加第二个memo区域用于生成negative prompts。
- templates = { ‘人物肖像’: [‘masterpiece’, ‘perfect face’, ‘soft lighting’], ‘风景场景’: [‘scenery’, ‘detailed environment’, ‘natural light’], }
- 添加循环生成功能,一次生成多组不同的提示词。
目录
- 项目概述
- 核心功能
- 1. 双模式生成系统
- 2. 智能分类系统
- 3. 双语显示机制
- 技术架构详解
- 界面布局结构
- 核心类设计
- 关键技术点
- 1. 动态创建控件
- 2. 实时更新机制
- 3. 随机生成算法
- 4. 剪贴板操作
- 数据流程图
- 使用场景示例
- AI绘图工作流
- 扩展建议
- 1. 增加提示词权重
- 2. 保存/加载配置
- 3. 负面提示词支持
- 4. 预设模板系统
- 5. 批量生成
- 性能优化
- 1. 控件复用
- 2. 延迟更新
- 3. 虚拟滚动
- 代码规范亮点
这是一个基于wxPython开发的AI绘图提示词(Prompt)生成器,专门用于帮助用户快速构建和管理Stable Diffusion、Midjourney等AI绘图工具的提示词。程序提供了两种生成模式:随机生成和手动选择,极大提升了提示词创作效率。
运行结果如下:

随机生成模式
- 用户设置每行抽取数量(1-5个词组)
- 程序从每行随机选择指定数量的词组
- 自动组合成完整的提示词
手动选择模式
- 为每一行生成独立的下拉框
- 实时预览选择效果
- 支持空选项,灵活控制输出
程序能够自动识别提示词类型,并为每个下拉框添加有意义的分类标签:
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等)
这是程序的一大亮点:下拉框显示中英文,但输出纯英文。
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 (复制按钮)
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)
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)清空并销毁旧控件 - 循环创建控件并绑定事件
- 使用列表存储控件引用,便于后续访问
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
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()保证不重复 - 处理词组数量不足的边界情况
- 按行顺序组合结果
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显示
↓
用户点击复制 → 写入剪贴板
用户输入文本
↓
点击"生成下拉框"
↓
解析每行文本 → 分割词组 → 识别分类
↓
创建下拉框 + 添加翻译 → 绑定事件
↓
用户选择词组
↓
触发on_combo_change事件
↓
遍历所有下拉框 → 提取英文值
↓
更新memo2显示
↓
用户点击复制 → 写入剪贴板
步骤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使用
# 支持(word:1.2)格式
combo_choices_display.append(f'{word} ({chinese}) [权重]')
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)
添加第二个memo区域用于生成negative prompts。
templates = {
'人物肖像': ['masterpiece', 'perfect face', 'soft lighting'],
'风景场景': ['scenery', 'detailed environment', 'natural light'],
}
添加循环生成功能,一次生成多组不同的提示词。
对于频繁切换的场景,考虑复用控件而不是销毁重建:
# 只更新choices而不是重建控件 combo.Clear() combo.Append(new_choices)
用户快速切换下拉框时避免频繁更新:
def on_combo_change(self, event):
if hasattr(self, 'update_timer'):
self.update_timer.Stop()
self.update_timer = wx.CallLater(300, self.update_memo2)
当行数超过100时,考虑使用虚拟列表控件。
- 清晰的职责分离:翻译、分类、UI逻辑分别封装
- 防御性编程:处理空输入、边界情况
- 用户友好:提供提示消息、默认值、示例数据
- 数据与显示分离:
combo_values存储实际值,显示中英文
combo_values存储实际值,显示中英文以上就是Python结合wxPython实现AI绘图提示词生成器的详细内容,更多关于Python AI绘图提示词生成器的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- 基于Python实现一个具有记忆功能的AI对话代理
- 基于Python+PyQt5开发一个AI智能截图解答工具
- 使用Python开发一个可调用工具的AI Agent
- Python基于wxPython开发一个图片PDF生成器
- Python使用FastAPI+SQLite构建一个短链接生成器服务
- 基于Python开发一个小说图片PDF生成器