import gradio as gr
import json
import os
# 配置路径
DATA_PATH = "data/students.json"
PHOTO_DIR = "data/photos"
def load_data():
if os.path.exists(DATA_PATH):
with open(DATA_PATH, 'r', encoding='utf-8') as f:
return json.load(f)
return []
students_data = load_data()
def search_student(name):
# 清除输入空格
target_name = name.strip()
result = next((s for s in students_data if s["name"] == target_name), None)
if not result:
return "❌ 未找到该同学信息", "", "无", None
# 获取字段信息
stu_class = result.get("class", "初59级二班")
status = result.get("status", "未知")
phone = result.get("phone", "").strip()
photo_path = result.get("photo", "")
# 格式化文本输出
info_html = f"""
基本信息:
📍 班级:{stu_class}
📌 状态:{status}
"""
phone_display = phone if phone else "未登记"
# 照片逻辑
if not photo_path or not os.path.exists(photo_path):
display_photo = None
else:
display_photo = photo_path
return info_html, phone_display, display_photo
# 构建美化界面
with gr.Blocks(title="初59级二班同学录") as demo:
gr.Markdown("# 🎓 初59级二班同学信息查询系统")
gr.Markdown("---")
with gr.Row():
with gr.Column(scale=1):
input_name = gr.Textbox(label="输入同学姓名", placeholder="请输入完整姓名...", lines=1)
search_btn = gr.Button("🔍 立即查询", variant="primary")
output_phone = gr.Label(label="联系电话")
with gr.Column(scale=2):
output_info = gr.HTML(label="详细状态")
output_photo = gr.Image(label="同学照片", type="filepath")
# 绑定事件
search_btn.click(
fn=search_student,
inputs=input_name,
outputs=[output_info, output_phone, output_photo]
)
# 支持回车搜索
input_name.submit(
fn=search_student,
inputs=input_name,
outputs=[output_info, output_phone, output_photo]
)
if __name__ == "__main__":
demo.launch()