import tkinter as tk
from tkinter import ttk

class TangPoemApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首 阅览器")
        self.root.geometry("700x550")
        self.root.resizable(False, False)

        # 诗词数据（精选唐诗，可自行扩充）
        self.poems = [
            {"title": "静夜思", "author": "李白", "content": "床前明月光，\n疑是地上霜。\n举头望明月，\n低头思故乡。"},
            {"title": "春晓", "author": "孟浩然", "content": "春眠不觉晓，\n处处闻啼鸟。\n夜来风雨声，\n花落知多少。"},
            {"title": "咏鹅", "author": "骆宾王", "content": "鹅，鹅，鹅，\n曲项向天歌。\n白毛浮绿水，\n红掌拨清波。"},
            {"title": "登鹳雀楼", "author": "王之涣", "content": "白日依山尽，\n黄河入海流。\n欲穷千里目，\n更上一层楼。"},
            {"title": "相思", "author": "王维", "content": "红豆生南国，\n春来发几枝。\n愿君多采撷，\n此物最相思。"},
            {"title": "望庐山瀑布", "author": "李白", "content": "日照香炉生紫烟，\n遥看瀑布挂前川。\n飞流直下三千尺，\n疑是银河落九天。"},
            {"title": "绝句", "author": "杜甫", "content": "两个黄鹂鸣翠柳，\n一行白鹭上青天。\n窗含西岭千秋雪，\n门泊东吴万里船。"},
            {"title": "清明", "author": "杜牧", "content": "清明时节雨纷纷，\n路上行人欲断魂。\n借问酒家何处有？\n牧童遥指杏花村。"},
            {"title": "咏柳", "author": "贺知章", "content": "碧玉妆成一树高，\n万条垂下绿丝绦。\n不知细叶谁裁出，\n二月春风似剪刀。"},
            {"title": "九月九日忆山东兄弟", "author": "王维", "content": "独在异乡为异客，\n每逢佳节倍思亲。\n遥知兄弟登高处，\n遍插茱萸少一人。"}
        ]

        self.current_index = 0  # 当前诗词索引
        self.total = len(self.poems)

        # 顶部标题栏
        top_frame = tk.Frame(root, padx=10, pady=10)
        top_frame.pack(fill=tk.X)
        tk.Label(top_frame, text="唐诗三百首", font=("微软雅黑", 20, "bold")).pack()

        # 主体区域：左侧列表 + 右侧内容
        main_frame = tk.Frame(root)
        main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)

        # 左侧诗词列表
        left_frame = tk.Frame(main_frame, width=200)
        left_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0,10))
        tk.Label(left_frame, text="诗词目录", font=("微软雅黑", 12)).pack()

        self.poem_listbox = tk.Listbox(left_frame, font=("微软雅黑", 11), width=18, height=22)
        scroll_bar = tk.Scrollbar(left_frame, command=self.poem_listbox.yview)
        self.poem_listbox.config(yscrollcommand=scroll_bar.set)
        scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
        self.poem_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        # 加载目录
        for idx, p in enumerate(self.poems):
            self.poem_listbox.insert(tk.END, f"{idx+1}. {p['title']}")
        # 点击列表切换诗词
        self.poem_listbox.bind("<<ListboxSelect>>", self.select_poem)

        # 右侧诗词展示区
        right_frame = tk.Frame(main_frame)
        right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

        # 诗名、作者
        self.title_var = tk.StringVar()
        self.author_var = tk.StringVar()
        tk.Label(right_frame, textvariable=self.title_var, font=("微软雅黑", 16, "bold")).pack(pady=5)
        tk.Label(right_frame, textvariable=self.author_var, font=("微软雅黑", 12), fg="#666666").pack(pady=2)

        # 诗词正文（带滚动条）
        content_frame = tk.Frame(right_frame)
        content_frame.pack(fill=tk.BOTH, expand=True, pady=10)
        self.content_text = tk.Text(content_frame, font=("微软雅黑", 14), width=35, height=15)
        content_scroll = tk.Scrollbar(content_frame, command=self.content_text.yview)
        self.content_text.config(yscrollcommand=content_scroll.set, state=tk.DISABLED)
        content_scroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.content_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        # 底部按钮区
        btn_frame = tk.Frame(root, pady=10)
        btn_frame.pack(fill=tk.X)
        tk.Button(btn_frame, text="上一首", font=("微软雅黑", 11), width=10, command=self.prev_poem).pack(side=tk.LEFT, padx=20)
        tk.Button(btn_frame, text="下一首", font=("微软雅黑", 11), width=10, command=self.next_poem).pack(side=tk.RIGHT, padx=20)

        # 初始化显示第一首
        self.show_poem(0)

    # 展示指定索引的诗词
    def show_poem(self, index):
        if 0 <= index < self.total:
            self.current_index = index
            poem = self.poems[index]
            # 更新标题、作者
            self.title_var.set(poem["title"])
            self.author_var.set(f"作者：{poem['author']}")
            # 更新正文
            self.content_text.config(state=tk.NORMAL)
            self.content_text.delete(1.0, tk.END)
            self.content_text.insert(tk.END, poem["content"])
            self.content_text.config(state=tk.DISABLED)
            # 同步选中列表项
            self.poem_listbox.selection_clear(0, tk.END)
            self.poem_listbox.selection_set(index)
            self.poem_listbox.see(index)

    # 列表点击选择诗词
    def select_poem(self, event):
        sel = self.poem_listbox.curselection()
        if sel:
            self.show_poem(sel[0])

    # 上一首
    def prev_poem(self):
        if self.current_index > 0:
            self.show_poem(self.current_index - 1)

    # 下一首
    def next_poem(self):
        if self.current_index < self.total - 1:
            self.show_poem(self.current_index + 1)

if __name__ == "__main__":
    win = tk.Tk()
    app = TangPoemApp(win)
    win.mainloop()