import random

#带界面版唐诗300首阅读小程序（tkinter实现）
import tkinter as tk

#唐诗数据集（可自行扩展）
tang_poems = [{'title': '静夜思', 'author': '李白', 'content': ['床前明月光，', '疑是地上霜。', '举头望明月，', '低头思故乡。']}, {'title': '登鹳雀楼', 'author': '王之涣', 'content': ['白日依山尽，', '黄河入海流。', '欲穷千里目，', '更上一层楼。']}, {'title': '春晓', 'author': '孟浩然', 'content': ['春眠不觉晓，', '处处闻啼鸟。', '夜来风雨声，', '花落知多少。']}, {'title': '相思', 'author': '王维', 'content': ['红豆生南国，', '春来发几枝。', '愿君多采撷，', '此物最相思。']}, {'title': '江雪', 'author': '柳宗元', 'content': ['千山鸟飞绝，', '万径人踪灭。', '孤舟蓑笠翁，', '独钓寒江雪。']}, {'title': '赋得古原草送别', 'author': '白居易', 'content': ['离离原上草，一岁一枯荣。', '野火烧不尽，春风吹又生。', '远芳侵古道，晴翠接荒城。', '又送王孙去，萋萋满别情。']}]

class TangPoemApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗300首阅读小程序")
        self.root.geometry("800x600")  # 设置窗口大小
        self.root.resizable(True, True)  # 允许窗口缩放

        # 初始化选中的诗词索引
        self.current_poem_index = 0

        # 构建界面
        self.create_widgets()

    def create_widgets(self):
        # 1. 顶部按钮区域
        top_frame = tk.Frame(self.root, padx=10, pady=10)
        top_frame.pack(fill=tk.X)

        # 随机查看按钮
        random_btn = tk.Button(
            top_frame,
            text="随机查看一首唐诗",
            command=self.show_random_poem,
            font=("微软雅黑", 12),
            bg="#4CAF50",
            fg="white",
            padx=20,
            pady=5
        )
        random_btn.pack(side=tk.LEFT)

        # 2. 中间主体区域（左右分栏）
        main_frame = tk.Frame(self.root, padx=10, pady=5)
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 左侧：诗词列表
        left_frame = tk.Frame(main_frame, width=200)
        left_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10))
        left_frame.pack_propagate(False)  # 固定宽度

        # 列表标题
        list_label = tk.Label(left_frame, text="唐诗列表", font=("微软雅黑", 14, "bold"))
        list_label.pack(pady=5)

        # 诗词列表框（带滚动条）
        self.poem_listbox = tk.Listbox(left_frame, font=("微软雅黑", 11), selectmode=tk.SINGLE)
        scrollbar = tk.Scrollbar(left_frame, orient=tk.VERTICAL, command=self.poem_listbox.yview)
        self.poem_listbox.config(yscrollcommand=scrollbar.set)

        # 填充列表
        for poem in tang_poems:
            self.poem_listbox.insert(tk.END, poem["title"])

        self.poem_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

        # 绑定列表点击事件
        self.poem_listbox.bind("<<ListboxSelect>>", self.on_list_select)

        # 右侧：诗词内容展示
        right_frame = tk.Frame(main_frame, bg="#f5f5f5", padx=20, pady=20)
        right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

        # 标题展示
        self.title_label = tk.Label(
            right_frame,
            text="",
            font=("微软雅黑", 18, "bold"),
            bg="#f5f5f5",
            fg="#333"
        )
        self.title_label.pack(pady=(0, 10))

        # 作者展示
        self.author_label = tk.Label(
            right_frame,
            text="",
            font=("微软雅黑", 14),
            bg="#f5f5f5",
            fg="#666"
        )
        self.author_label.pack(pady=(0, 20))

        # 内容展示（多行文本）
        self.content_text = tk.Text(
            right_frame,
            font=("微软雅黑", 16),
            bg="#f5f5f5",
            wrap=tk.WORD,
            bd=0,
            state=tk.DISABLED  # 设为只读
        )
        self.content_text.pack(fill=tk.BOTH, expand=True)

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

    def show_poem(self, index):
        """展示指定索引的唐诗"""
        if 0 <= index < len(tang_poems):
            poem = tang_poems[index]
            # 更新标题和作者
            self.title_label.config(text=poem["title"])
            self.author_label.config(text=f"—— {poem['author']}")

            # 更新内容（先解锁文本框，写入后再锁定）
            self.content_text.config(state=tk.NORMAL)
            self.content_text.delete(1.0, tk.END)  # 清空原有内容
            for line in poem["content"]:
                self.content_text.insert(tk.END, line + "\n")
            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 show_random_poem(self):
        """随机展示一首唐诗"""
        random_index = random.randint(0, len(tang_poems)-1)
        self.show_poem(random_index)

    def on_list_select(self, event):
        """列表项点击事件"""
        selected_indices = self.poem_listbox.curselection()
        if selected_indices:
            selected_index = int(selected_indices[0])
            self.show_poem(selected_index)

#设置窗口大小
#允许窗口缩放

#初始化选中的诗词索引

#构建界面

#1. 顶部按钮区域

#随机查看按钮

#2. 中间主体区域（左右分栏）

#左侧：诗词列表

#固定宽度

#列表标题

#诗词列表框（带滚动条）

#填充列表

#绑定列表点击事件

#右侧：诗词内容展示

#标题展示

#作者展示

#内容展示（多行文本）

#设为只读

#初始化展示第一首诗

#更新标题和作者

#更新内容（先解锁文本框，写入后再锁定）

#清空原有内容

#选中列表对应项

#滚动到选中项

if (__name__ == '__main__'):
    #创建主窗口
    root = tk.Tk()
    #实例化应用
    app = TangPoemApp(root)
    #运行主循环
    root.mainloop()
