import tkinter as tk
from tkinter import scrolledtext
from openai import OpenAI
import pyperclip # 用于复制文本到剪贴板
# 初始化 OpenAI 客户端
client = OpenAI(
base_url="https://oneapi.xty.app/v1",
api_key="sk-gfJsNLc7n7AWUmJG4c2030D10d1d479197400c6c53D58d79"
)
# 系统指令(instruction)
instruction = (
"你是stable diffusion的提示词生成器,我会给你一个简单的中文,如'苹果',请判断输入词的领域。"
"根据输入的物体以及输入词的行业领域特点,然后请你返还给我一个英文句子的提示词,注意是稍微长的句子不是一系列词的组合"
"总提示词大约50英文单词以内,(联想扩充画面细节)并加上相应提升画面效果的词语(如打光,高清,商业摄影等)(效果词可以作为短句加在最后),"
"用于生成惊艳的stable diffusion画面。每次接受中文或英文输入后只要返还英文提示词,不要说其他东西。"
)
# 初始系统消息
messages = [
{"role": "system", "content": instruction}
]
# 创建主窗口
window = tk.Tk()
window.title("stable diffusion提示词生成器")
window.configure(background='white')
# 创建使用说明标签
usage_label = tk.Label(window, text="请输入一个词(如'苹果'),点击'生成提示词'以生成提示词。", bg='white', fg='black',
font=('Arial', 12))
usage_label.pack(pady=10)
# 创建输入文本框
input_box = tk.Entry(window, width=50, font=('Arial', 14), bg='white')
input_box.pack(pady=20)
# 创建输出文本区域
output_box = scrolledtext.ScrolledText(window, width=60, height=10, font=('Arial', 14), bg='white', fg='black')
output_box.pack(pady=20)
# 发送消息并获取回答的函数
def send_and_get_reply():
user_input = input_box.get()
# 将用户的消息添加到消息列表
messages.append({"role": "user", "content": user_input})
# 获取模型的回答
completion = client.chat.completions.create(
model="gpt-4-1106-preview",
messages=messages
)
# 提取 GPT 的回答
gpt_response = completion.choices[0].message.content
# 清空输出框并将处理后的 GPT 回答显示在输出文本区域
output_box.delete('1.0', tk.END)
output_box.insert(tk.END, f"{gpt_response}\n")
# 将 GPT 的回答也添加到消息列表,以便用于下一轮对话
messages.append({"role": "assistant", "content": gpt_response})
# 创建发送按钮
send_button = tk.Button(window, text="生成提示词", command=send_and_get_reply, font=('Arial', 14), bg='lightblue',
fg='black')
send_button.pack(pady=20)
# 复制到剪贴板的函数
def copy_to_clipboard():
text = output_box.get("1.0", tk.END) # 获取输出文本区域的内容
pyperclip.copy(text.strip()) # 将文本复制到剪贴板
# 创建复制按钮
copy_button = tk.Button(window, text="复制到剪贴板", command=copy_to_clipboard, font=('Arial', 14), bg='lightgreen',
fg='black')
copy_button.pack(pady=20)
# 运行主循环
window.mainloop()