maickzhong's picture
Upload 8 files
73e6793 verified
import gradio as gr
import config # 导入配置以获取选项和默认值
import ui_layout
# 注意:这里的函数只负责创建组件并返回它们。
# 它们的初始值来自于主程序加载的 initial_settings。
# 事件绑定将在主程序中完成。
def create_core_instruction_tab(initial_settings):
"""创建“核心指令”选项卡及其组件"""
with gr.Tab("核心指令"):
gr.Markdown("### I. 输入创作要求")
prompt_instruction = gr.Textbox(
label="📝 具体要求 / 本次提示",
lines=5,
placeholder="生成新内容或继续写作/重写时请在此提供具体指示..."
)
target_outline_section = gr.Textbox(
label="🎯 聚焦大纲章节/要点",
lines=3,
placeholder="从下方'提取标题'选择或手动输入...",
value=initial_settings["target_outline_section"]
)
rewrite_instruction_textbox = gr.Textbox(
label="✍️ 输入具体重写/修改要求",
lines=2,
value=initial_settings["rewrite_instruction_textbox"]
)
# 返回包含组件的字典
return {
"prompt_instruction": prompt_instruction,
"target_outline_section": target_outline_section,
"rewrite_instruction_textbox": rewrite_instruction_textbox
}
def create_parameters_tab(initial_settings):
"""创建“参数设定”选项卡及其组件"""
with gr.Tab("参数设定"):
gr.Markdown("### II. 特定参数设定")
genre = gr.Dropdown(
config.GENRE_CHOICES, label="✍️ 类型", value=initial_settings["genre"]
)
style = gr.Dropdown(
config.STYLE_CHOICES, label="🎨 写作风格", value=initial_settings["style"]
)
word_count = gr.Slider(
minimum=100, maximum=8000, value=initial_settings["word_count"], step=50, label="📄 字数 (最大请求Token受限)"
)
temperature_slider = gr.Slider(
minimum=0.1, maximum=2.0, step=0.1, label="🌡️ Temperature (随机性)", value=initial_settings["temperature"]
)
return {
"genre": genre,
"style": style,
"word_count": word_count,
"temperature_slider": temperature_slider
}
def create_core_elements_tab(initial_settings):
"""创建“核心要素 (小说)”选项卡及其组件"""
with gr.Tab("核心要素 (小说)"):
gr.Markdown("### III. 核心要素设定 (小说类专属)")
initial_visibility = "小说" in initial_settings["genre"]
core_chars = gr.Textbox(label="👤 核心人物简介", lines=3, value=initial_settings["core_chars"], visible=initial_visibility)
core_setting = gr.Textbox(label="🌍 世界观/主要设定", lines=3, value=initial_settings["core_setting"], visible=initial_visibility)
core_plot = gr.Textbox(label="📈 核心情节要点", lines=3, value=initial_settings["core_plot"], visible=initial_visibility)
return {
"core_chars": core_chars,
"core_setting": core_setting,
"core_plot": core_plot
}
def create_files_save_tab(initial_settings):
"""创建“文件与保存”选项卡及其组件"""
with gr.Tab("文件与保存"):
gr.Markdown("### IV. 大纲文件")
upload_btn = gr.File(label="📂 上传大纲 (.pdf, .docx, .txt)", file_types=config.FILE_TYPES)
outline_headings_display = gr.Dropdown(label="👀 提取到的标题列表 (供参考/复制)", choices=[], interactive=False)
gr.Markdown("---")
gr.Markdown("### VI. 手动保存/下载")
save_basename_textbox = gr.Textbox(label="📄 文件名", value=initial_settings["save_basename_textbox"], scale=2)
with gr.Row():
save_format_dropdown = gr.Dropdown(choices=config.SAVE_FORMAT_CHOICES, value="Markdown (.md)", label="💾 下载格式", scale=2)
download_button = gr.Button("💻 下载到本地", scale=1)
save_to_drive_button = gr.Button("☁️ 手动另存到 Drive", scale=1)
save_status_display = gr.Markdown("")
download_file_output = gr.File(label="📎 下载链接", interactive=False)
gr.Markdown("---")
gr.Markdown("### VII. 应用设置")
save_settings_button = gr.Button("⚙️ 保存当前所有设置和历史到 Drive")
settings_save_status_display = gr.Markdown("")
return {
"upload_btn": upload_btn,
"outline_headings_display": outline_headings_display,
"save_basename_textbox": save_basename_textbox,
"save_format_dropdown": save_format_dropdown,
"download_button": download_button,
"save_to_drive_button": save_to_drive_button,
"save_status_display": save_status_display,
"download_file_output": download_file_output,
"save_settings_button": save_settings_button,
"settings_save_status_display": settings_save_status_display
}
def create_action_buttons():
"""创建执行操作按钮行"""
gr.Markdown("### V. 执行操作")
with gr.Row():
generate_btn = gr.Button("🚀 生成新内容", variant="primary")
continue_btn = gr.Button("➡️ 继续写作")
rewrite_btn = gr.Button("✍️ 重写编辑后文本")
return {
"generate_btn": generate_btn,
"continue_btn": continue_btn,
"rewrite_btn": rewrite_btn
}
def create_output_area(initial_full_text):
"""创建右侧输出区域"""
gr.Markdown("## AI 生成结果 (完整文稿)")
output_textbox = gr.Textbox(
label="💡 输出区域 (流式显示, 会自动保存)",
lines=35,
interactive=True,
value=initial_full_text,
show_copy_button=True
)
return {"output_textbox": output_textbox}
print("✅ ui_layout.py created.")