# -*- coding: utf-8 -*-
"""
唐诗三百首（30首）图形界面版
使用tkinter实现可视化操作界面
"""
import tkinter as tk
from tkinter import ttk, scrolledtext

# ===================== 唐诗数据集（30首）=====================
tang_poems = [
    {
        "title": "静夜思",
        "author": "李白",
        "content": ["床前明月光，", "疑是地上霜。", "举头望明月，", "低头思故乡。"]
    },
    {
        "title": "登鹳雀楼",
        "author": "王之涣",
        "content": ["白日依山尽，", "黄河入海流。", "欲穷千里目，", "更上一层楼。"]
    },
    {
        "title": "春晓",
        "author": "孟浩然",
        "content": ["春眠不觉晓，", "处处闻啼鸟。", "夜来风雨声，", "花落知多少。"]
    },
    {
        "title": "赋得古原草送别",
        "author": "白居易",
        "content": ["离离原上草，", "一岁一枯荣。", "野火烧不尽，", "春风吹又生。", 
                    "远芳侵古道，", "晴翠接荒城。", "又送王孙去，", "萋萋满别情。"]
    },
    {
        "title": "相思",
        "author": "王维",
        "content": ["红豆生南国，", "春来发几枝。", "愿君多采撷，", "此物最相思。"]
    },
    {
        "title": "江雪",
        "author": "柳宗元",
        "content": ["千山鸟飞绝，", "万径人踪灭。", "孤舟蓑笠翁，", "独钓寒江雪。"]
    },
    {
        "title": "鹿柴",
        "author": "王维",
        "content": ["空山不见人，", "但闻人语响。", "返景入深林，", "复照青苔上。"]
    },
    {
        "title": "送孟浩然之广陵",
        "author": "李白",
        "content": ["故人西辞黄鹤楼，", "烟花三月下扬州。", "孤帆远影碧空尽，", "唯见长江天际流。"]
    },
    {
        "title": "望庐山瀑布",
        "author": "李白",
        "content": ["日照香炉生紫烟，", "遥看瀑布挂前川。", "飞流直下三千尺，", "疑是银河落九天。"]
    },
    {
        "title": "绝句",
        "author": "杜甫",
        "content": ["两个黄鹂鸣翠柳，", "一行白鹭上青天。", "窗含西岭千秋雪，", "门泊东吴万里船。"]
    },
    {
        "title": "早发白帝城",
        "author": "李白",
        "content": ["朝辞白帝彩云间，", "千里江陵一日还。", "两岸猿声啼不住，", "轻舟已过万重山。"]
    },
    {
        "title": "九月九日忆山东兄弟",
        "author": "王维",
        "content": ["独在异乡为异客，", "每逢佳节倍思亲。", "遥知兄弟登高处，", "遍插茱萸少一人。"]
    },
    {
        "title": "凉州词",
        "author": "王翰",
        "content": ["葡萄美酒夜光杯，", "欲饮琵琶马上催。", "醉卧沙场君莫笑，", "古来征战几人回？"]
    },
    {
        "title": "出塞",
        "author": "王昌龄",
        "content": ["秦时明月汉时关，", "万里长征人未还。", "但使龙城飞将在，", "不教胡马度阴山。"]
    },
    {
        "title": "芙蓉楼送辛渐",
        "author": "王昌龄",
        "content": ["寒雨连江夜入吴，", "平明送客楚山孤。", "洛阳亲友如相问，", "一片冰心在玉壶。"]
    },
    {
        "title": "山居秋暝",
        "author": "王维",
        "content": ["空山新雨后，", "天气晚来秋。", "明月松间照，", "清泉石上流。",
                    "竹喧归浣女，", "莲动下渔舟。", "随意春芳歇，", "王孙自可留。"]
    },
    {
        "title": "黄鹤楼",
        "author": "崔颢",
        "content": ["昔人已乘黄鹤去，", "此地空余黄鹤楼。", "黄鹤一去不复返，", "白云千载空悠悠。",
                    "晴川历历汉阳树，", "芳草萋萋鹦鹉洲。", "日暮乡关何处是？", "烟波江上使人愁。"]
    },
    {
        "title": "清明",
        "author": "杜牧",
        "content": ["清明时节雨纷纷，", "路上行人欲断魂。", "借问酒家何处有？", "牧童遥指杏花村。"]
    },
    {
        "title": "山行",
        "author": "杜牧",
        "content": ["远上寒山石径斜，", "白云生处有人家。", "停车坐爱枫林晚，", "霜叶红于二月花。"]
    },
    {
        "title": "泊秦淮",
        "author": "杜牧",
        "content": ["烟笼寒水月笼沙，", "夜泊秦淮近酒家。", "商女不知亡国恨，", "隔江犹唱后庭花。"]
    },
    {
        "title": "夜雨寄北",
        "author": "李商隐",
        "content": ["君问归期未有期，", "巴山夜雨涨秋池。", "何当共剪西窗烛，", "却话巴山夜雨时。"]
    },
    {
        "title": "无题·相见时难别亦难",
        "author": "李商隐",
        "content": ["相见时难别亦难，", "东风无力百花残。", "春蚕到死丝方尽，", "蜡炬成灰泪始干。",
                    "晓镜但愁云鬓改，", "夜吟应觉月光寒。", "蓬山此去无多路，", "青鸟殷勤为探看。"]
    },
    {
        "title": "登高",
        "author": "杜甫",
        "content": ["风急天高猿啸哀，", "渚清沙白鸟飞回。", "无边落木萧萧下，", "不尽长江滚滚来。",
                    "万里悲秋常作客，", "百年多病独登台。", "艰难苦恨繁霜鬓，", "潦倒新停浊酒杯。"]
    },
    {
        "title": "春望",
        "author": "杜甫",
        "content": ["国破山河在，", "城春草木深。", "感时花溅泪，", "恨别鸟惊心。",
                    "烽火连三月，", "家书抵万金。", "白头搔更短，", "浑欲不胜簪。"]
    },
    {
        "title": "送杜少府之任蜀州",
        "author": "王勃",
        "content": ["城阙辅三秦，", "风烟望五津。", "与君离别意，", "同是宦游人。",
                    "海内存知己，", "天涯若比邻。", "无为在歧路，", "儿女共沾巾。"]
    },
    {
        "title": "咏柳",
        "author": "贺知章",
        "content": ["碧玉妆成一树高，", "万条垂下绿丝绦。", "不知细叶谁裁出，", "二月春风似剪刀。"]
    },
    {
        "title": "回乡偶书",
        "author": "贺知章",
        "content": ["少小离家老大回，", "乡音无改鬓毛衰。", "儿童相见不相识，", "笑问客从何处来。"]
    },
    {
        "title": "题西林壁",
        "author": "苏轼",
        "content": ["横看成岭侧成峰，", "远近高低各不同。", "不识庐山真面目，", "只缘身在此山中。"]
    },
    {
        "title": "饮湖上初晴后雨",
        "author": "苏轼",
        "content": ["水光潋滟晴方好，", "山色空蒙雨亦奇。", "欲把西湖比西子，", "淡妆浓抹总相宜。"]
    },
    {
        "title": "夏日绝句",
        "author": "李清照",
        "content": ["生当作人杰，", "死亦为鬼雄。", "至今思项羽，", "不肯过江东。"]
    }
]

# ===================== GUI界面类 =====================
class TangPoemGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首 - 精选30首")
        self.root.geometry("800x600")  # 窗口大小
        self.root.resizable(True, True)  # 允许调整窗口大小
        
        # 设置字体
        self.font_normal = ("微软雅黑", 11)
        self.font_title = ("微软雅黑", 14, "bold")
        self.font_poem = ("楷体", 12)
        
        # 创建界面组件
        self.create_widgets()
    
    def create_widgets(self):
        """创建所有界面组件"""
        # 1. 顶部标题栏
        title_frame = ttk.Frame(self.root)
        title_frame.pack(fill=tk.X, padx=20, pady=10)
        
        title_label = ttk.Label(title_frame, text="唐诗三百首（精选30首）", font=self.font_title)
        title_label.pack()
        
        # 2. 功能按钮和搜索框区域
        func_frame = ttk.Frame(self.root)
        func_frame.pack(fill=tk.X, padx=20, pady=5)
        
        # 功能按钮
        ttk.Button(func_frame, text="查看全部唐诗", command=self.show_all_poems).pack(side=tk.LEFT, padx=5)
        ttk.Button(func_frame, text="按标题搜索", command=self.search_by_title).pack(side=tk.LEFT, padx=5)
        ttk.Button(func_frame, text="按作者搜索", command=self.search_by_author).pack(side=tk.LEFT, padx=5)
        ttk.Button(func_frame, text="清空内容", command=self.clear_text).pack(side=tk.LEFT, padx=5)
        
        # 搜索输入框
        self.search_var = tk.StringVar()
        search_entry = ttk.Entry(func_frame, textvariable=self.search_var, font=self.font_normal, width=30)
        search_entry.pack(side=tk.LEFT, padx=10)
        search_entry.insert(0, "请输入搜索关键词...")
        
        # 输入框获取焦点时清空默认文字
        def clear_placeholder(event):
            if search_entry.get() == "请输入搜索关键词...":
                search_entry.delete(0, tk.END)
        
        # 输入框失去焦点时恢复默认文字
        def set_placeholder(event):
            if not search_entry.get():
                search_entry.insert(0, "请输入搜索关键词...")
        
        search_entry.bind("<FocusIn>", clear_placeholder)
        search_entry.bind("<FocusOut>", set_placeholder)
        
        # 3. 唐诗展示区域（带滚动条）
        poem_frame = ttk.Frame(self.root)
        poem_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)
        
        self.poem_text = scrolledtext.ScrolledText(
            poem_frame, 
            font=self.font_poem,
            wrap=tk.WORD,
            bg="#F8F9FA",  # 浅灰色背景
            bd=1,
            relief=tk.SUNKEN
        )
        self.poem_text.pack(fill=tk.BOTH, expand=True)
        # 设置文本框只读（可选编辑，这里设为只读）
        self.poem_text.config(state=tk.DISABLED)
    
    def format_poem(self, poem):
        """格式化单首唐诗的展示内容"""
        content = "\n".join(poem["content"])
        poem_str = f"【{poem['title']}】\n作者：{poem['author']}\n{content}\n{'-'*50}\n"
        return poem_str
    
    def show_all_poems(self):
        """展示所有30首唐诗"""
        self.clear_text()
        self.poem_text.config(state=tk.NORMAL)
        
        self.poem_text.insert(tk.END, "="*60 + "\n")
        self.poem_text.insert(tk.END, "                唐诗三百首 - 精选30首\n")
        self.poem_text.insert(tk.END, "="*60 + "\n\n")
        
        for idx, poem in enumerate(tang_poems, 1):
            self.poem_text.insert(tk.END, f"第{idx}首：")
            self.poem_text.insert(tk.END, self.format_poem(poem))
        
        self.poem_text.config(state=tk.DISABLED)
    
    def search_by_title(self):
        """按标题搜索唐诗"""
        keyword = self.search_var.get().strip()
        if not keyword or keyword == "请输入搜索关键词...":
            self.show_message("提示", "请输入搜索关键词！")
            return
        
        self.clear_text()
        self.poem_text.config(state=tk.NORMAL)
        
        results = [p for p in tang_poems if keyword in p["title"]]
        
        if results:
            self.poem_text.insert(tk.END, f"找到 {len(results)} 首标题包含「{keyword}」的唐诗：\n")
            self.poem_text.insert(tk.END, "-"*50 + "\n\n")
            for poem in results:
                self.poem_text.insert(tk.END, self.format_poem(poem))
        else:
            self.poem_text.insert(tk.END, f"未找到标题包含「{keyword}」的唐诗！")
        
        self.poem_text.config(state=tk.DISABLED)
    
    def search_by_author(self):
        """按作者搜索唐诗"""
        keyword = self.search_var.get().strip()
        if not keyword or keyword == "请输入搜索关键词...":
            self.show_message("提示", "请输入搜索关键词！")
            return
        
        self.clear_text()
        self.poem_text.config(state=tk.NORMAL)
        
        results = [p for p in tang_poems if keyword in p["author"]]
        
        if results:
            self.poem_text.insert(tk.END, f"找到 {len(results)} 首{keyword}的唐诗：\n")
            self.poem_text.insert(tk.END, "-"*50 + "\n\n")
            for poem in results:
                self.poem_text.insert(tk.END, self.format_poem(poem))
        else:
            self.poem_text.insert(tk.END, f"未找到{keyword}的唐诗！")
        
        self.poem_text.config(state=tk.DISABLED)
    
    def clear_text(self):
        """清空展示区域内容"""
        self.poem_text.config(state=tk.NORMAL)
        self.poem_text.delete(1.0, tk.END)
        self.poem_text.config(state=tk.DISABLED)
    
    def show_message(self, title, message):
        """弹出提示框"""
        tk.messagebox.showinfo(title, message)

# ===================== 程序入口 =====================
if __name__ == "__main__":
    root = tk.Tk()
    app = TangPoemGUI(root)
    root.mainloop()