import tkinter as tk
from tkinter import ttk, scrolledtext

# ============== 主窗口 ==============
root = tk.Tk()
root.title("唐诗三百首")
root.geometry("650x550")
root.resizable(True, True)

# ============== 诗词数据 ==============
poems = [
    {"title": "静夜思", "author": "李白", "content": "床前明月光，疑是地上霜。\n举头望明月，低头思故乡。"},
    {"title": "春晓", "author": "孟浩然", "content": "春眠不觉晓，处处闻啼鸟。\n夜来风雨声，花落知多少。"},
    {"title": "登鹳雀楼", "author": "王之涣", "content": "白日依山尽，黄河入海流。\n欲穷千里目，更上一层楼。"},
    {"title": "相思", "author": "王维", "content": "红豆生南国，春来发几枝。\n愿君多采撷，此物最相思。"},
    {"title": "咏鹅", "author": "骆宾王", "content": "鹅，鹅，鹅，曲项向天歌。\n白毛浮绿水，红掌拨清波。"},
    {"title": "江雪", "author": "柳宗元", "content": "千山鸟飞绝，万径人踪灭。\n孤舟蓑笠翁，独钓寒江雪。"},
    {"title": "寻隐者不遇", "author": "贾岛", "content": "松下问童子，言师采药去。\n只在此山中，云深不知处。"},
    {"title": "回乡偶书", "author": "贺知章",
        "content": "少小离家老大回，乡音无改鬓毛衰。\n儿童相见不相识，笑问客从何处来。"},
    {"title": "九月九日忆山东兄弟", "author": "王维",
        "content": "独在异乡为异客，每逢佳节倍思亲。\n遥知兄弟登高处，遍插茱萸少一人。"},
    {"title": "送元二使安西", "author": "王维",
        "content": "渭城朝雨浥轻尘，客舍青青柳色新。\n劝君更尽一杯酒，西出阳关无故人。"},
    {"title": "望庐山瀑布", "author": "李白",
        "content": "日照香炉生紫烟，遥看瀑布挂前川。\n飞流直下三千尺，疑是银河落九天。"},
    {"title": "早发白帝城", "author": "李白",
        "content": "朝辞白帝彩云间，千里江陵一日还。\n两岸猿声啼不住，轻舟已过万重山。"},
]

# ============== 搜索函数 ==============


def search_poem():
    keyword = entry_search.get().strip()
    listbox_poems.delete(0, tk.END)

    for poem in poems:
        if (keyword in poem["title"] or
            keyword in poem["author"] or
                keyword in poem["content"]):
            listbox_poems.insert(tk.END, f"{poem['title']} - {poem['author']}")

# ============== 显示选中诗词 ==============


def show_selected_poem(event):
    try:
        index = listbox_poems.curselection()[0]
        poem = poems[index]

        text_content.config(state=tk.NORMAL)
        text_content.delete(1.0, tk.END)
        text_content.insert(tk.END, f"《{poem['title']}》\n")
        text_content.insert(tk.END, f"【唐】{poem['author']}\n\n")
        text_content.insert(tk.END, poem['content'])
        text_content.config(state=tk.DISABLED)
    except:
        pass


# ============== 界面布局 ==============
# 顶部搜索栏
frame_top = tk.Frame(root)
frame_top.pack(pady=10, fill=tk.X, padx=20)

tk.Label(frame_top, text="搜索诗词/作者：", font=("微软雅黑", 12)
         ).pack(side=tk.LEFT, padx=5)
entry_search = tk.Entry(frame_top, font=("微软雅黑", 12), width=20)
entry_search.pack(side=tk.LEFT, padx=5)
btn_search = tk.Button(frame_top, text="搜索", font=(
    "微软雅黑", 11), command=search_poem)
btn_search.pack(side=tk.LEFT, padx=5)
btn_reset = tk.Button(frame_top, text="显示全部", font=(
    "微软雅黑", 11), command=lambda: (entry_search.delete(0, tk.END), load_all_poems()))
btn_reset.pack(side=tk.LEFT, padx=5)

# 左侧列表
frame_left = tk.Frame(root)
frame_left.pack(side=tk.LEFT, fill=tk.BOTH, padx=20, pady=10)

tk.Label(frame_left, text="诗词列表", font=("微软雅黑", 14)).pack()
listbox_poems = tk.Listbox(frame_left, font=("微软雅黑", 12), width=25, height=25)
listbox_poems.pack(fill=tk.BOTH, expand=True)
listbox_poems.bind("<<ListboxSelect>>", show_selected_poem)

# 右侧内容
frame_right = tk.Frame(root)
frame_right.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=20, pady=10)

tk.Label(frame_right, text="诗词内容", font=("微软雅黑", 14)).pack()
text_content = scrolledtext.ScrolledText(
    frame_right,
    font=("微软雅黑", 14),
    width=35,
    height=25,
    wrap=tk.WORD
)
text_content.pack(fill=tk.BOTH, expand=True)
text_content.config(state=tk.DISABLED)

# ============== 加载所有诗词 ==============


def load_all_poems():
    listbox_poems.delete(0, tk.END)
    for poem in poems:
        listbox_poems.insert(tk.END, f"{poem['title']} - {poem['author']}")


# 初始化显示
load_all_poems()

# 启动
root.mainloop()
