实现思路
- 先搭建 Tkinter 图形界面,包含主题输入框、结果展示框,以及生成概要、生成大纲、导入、复制等按钮。
- 封装调用豆包 API 的函数(需要你自行替换为有效的 API 密钥和接口地址)。
- 生成概要/大纲:获取输入的主题,调用 API 生成对应内容并展示。
完整代码实现
import tkinter as tkfrom tkinter import scrolledtext, filedialog, messageboximport requestsimport jsonimport pyperclip # 用于复制内容到剪贴板# ---------------------- 配置豆包API(需替换为你的真实信息) ----------------------# 注意:豆包API需要先申请,以下是示例格式,需替换为有效密钥和接口地址API_KEY = "你的豆包API密钥"API_URL = "https://api.doubao.com/v1/chat/completions"# 示例地址,以官方为准# ---------------------- API调用函数 ----------------------defcall_doubao_api(prompt):"""调用豆包API生成内容""" headers = {"Content-Type": "application/json","Authorization": f"Bearer {API_KEY}" } data = {"model": "doubao-pro", # 豆包模型名称,以官方为准"messages": [{"role": "user", "content": prompt}],"temperature": 0.7, # 创作随机性,0-1之间"max_tokens": 1000# 生成内容的最大长度 }try: response = requests.post(API_URL, headers=headers, json=data, timeout=30) response.raise_for_status() # 抛出HTTP错误 result = response.json()return result["choices"][0]["message"]["content"].strip()except requests.exceptions.RequestException as e: messagebox.showerror("API调用失败", f"请求错误:{str(e)}")return""except KeyError as e: messagebox.showerror("返回格式错误", f"API返回数据异常:{str(e)}")return""# ---------------------- 界面功能函数 ----------------------defgenerate_story_summary():"""生成故事概要""" theme = entry_theme.get("1.0", tk.END).strip()ifnot theme: messagebox.showwarning("提示", "请输入文章主题!")return# 构造提示词 prompt = f"请根据以下主题生成一篇小说的故事概要,要求简洁明了,字数控制在300字以内:\n{theme}"# 生成内容并展示 summary = call_doubao_api(prompt)if summary: text_result.delete("1.0", tk.END) text_result.insert(tk.END, summary)defgenerate_story_outline():"""生成故事大纲""" theme = entry_theme.get("1.0", tk.END).strip()ifnot theme: messagebox.showwarning("提示", "请输入文章主题!")return# 构造提示词 prompt = f"请根据以下主题生成一篇小说的详细大纲,包含章节划分、核心情节、人物设定,要求结构清晰:\n{theme}"# 生成内容并展示 outline = call_doubao_api(prompt)if outline: text_result.delete("1.0", tk.END) text_result.insert(tk.END, outline)defimport_text():"""导入本地文本文件到主题输入框""" file_path = filedialog.askopenfilename( title="选择文本文件", filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")] )if file_path:try:with open(file_path, "r", encoding="utf-8") as f: content = f.read() entry_theme.delete("1.0", tk.END) entry_theme.insert(tk.END, content)except Exception as e: messagebox.showerror("导入失败", f"读取文件错误:{str(e)}")defcopy_content():"""复制结果框内容到剪贴板""" content = text_result.get("1.0", tk.END).strip()ifnot content: messagebox.showwarning("提示", "没有可复制的内容!")return pyperclip.copy(content) messagebox.showinfo("提示", "内容已复制到剪贴板!")# ---------------------- 搭建Tkinter界面 ----------------------defcreate_gui(): root = tk.Tk() root.title("AI小说自动创作工具") root.geometry("800x600") # 设置窗口大小# 1. 主题输入区域 frame_theme = tk.Frame(root, padx=10, pady=10) frame_theme.pack(fill=tk.X) label_theme = tk.Label(frame_theme, text="文章主题:", font=("宋体", 12)) label_theme.pack(side=tk.LEFT) entry_theme = scrolledtext.ScrolledText(frame_theme, height=5, font=("宋体", 12)) entry_theme.pack(fill=tk.X, expand=True, padx=5)# 2. 功能按钮区域 frame_buttons = tk.Frame(root, padx=10, pady=5) frame_buttons.pack(fill=tk.X) btn_summary = tk.Button(frame_buttons, text="生成故事概要", command=generate_story_summary, width=15, font=("宋体", 10)) btn_summary.pack(side=tk.LEFT, padx=5) btn_outline = tk.Button(frame_buttons, text="生成故事大纲", command=generate_story_outline, width=15, font=("宋体", 10)) btn_outline.pack(side=tk.LEFT, padx=5) btn_import = tk.Button(frame_buttons, text="导入文本", command=import_text, width=15, font=("宋体", 10)) btn_import.pack(side=tk.LEFT, padx=5) btn_copy = tk.Button(frame_buttons, text="复制内容", command=copy_content, width=15, font=("宋体", 10)) btn_copy.pack(side=tk.LEFT, padx=5)# 3. 结果展示区域 frame_result = tk.Frame(root, padx=10, pady=10) frame_result.pack(fill=tk.BOTH, expand=True) label_result = tk.Label(frame_result, text="生成结果:", font=("宋体", 12)) label_result.pack(anchor=tk.W) text_result = scrolledtext.ScrolledText(frame_result, font=("宋体", 12)) text_result.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)# 全局变量,供其他函数调用global entry_theme, text_result entry_theme = entry_theme text_result = text_result root.mainloop()# ---------------------- 主程序入口 ----------------------if __name__ == "__main__":# 安装依赖(如果未安装)# pip install requests pyperclip create_gui()
关键说明
- 你需要先去豆包开放平台申请 API 密钥(API_KEY)和确认正确的接口地址(API_URL),替换代码中对应的占位符。
- 不同模型的名称(如
doubao-pro)也需要以官方文档为准。
- 依赖安装: 运行代码前需要安装依赖库,执行以下命令:
pip install requests pyperclip tkinter
(注:tkinter 一般随 Python 自带,若缺失可单独安装) - 生成概要/大纲:通过构造不同的提示词,引导 AI 生成对应类型的内容,可根据需求调整提示词和参数(如
temperature 控制随机性,max_tokens 控制长度)。 - 导入文本:支持读取本地 .txt 文件内容到主题输入框,方便导入已有主题素材。
- 复制内容:借助
pyperclip 库将生成的结果复制到系统剪贴板,方便后续使用。
总结
- 核心功能是通过 Tkinter 搭建可视化界面,封装豆包 API 调用逻辑实现 AI 生成小说内容。
- 关键步骤:替换有效 API 密钥和地址 → 安装依赖 → 输入主题 → 点击按钮生成/导入/复制内容。
- 可扩展方向:增加保存结果、自定义提示词、调整 AI 生成参数等功能,或优化界面布局和样式。