import tkinter as tk
from tkinter import ttk, messagebox
import random

class TangPoetryReader:
    def __init__(self, root):
        # 初始化主窗口
        self.root = root
        self.root.title("唐诗三百首阅读器")
        self.root.geometry("800x600")
        self.root.resizable(True, True)
        
        # 初始化字体大小
        self.font_size = 14
        
        # 唐诗数据源（示例，可自行扩展）
        self.poetry_data = [
            {
                "title": "静夜思",
                "author": "李白",
                "content": [
                    "床前明月光，",
                    "疑是地上霜。",
                    "举头望明月，",
                    "低头思故乡。"
                ]
            },
            {
                "title": "登鹳雀楼",
                "author": "王之涣",
                "content": [
                    "白日依山尽，",
                    "黄河入海流。",
                    "欲穷千里目，",
                    "更上一层楼。"
                ]
            },
            {
                "title": "春晓",
                "author": "孟浩然",
                "content": [
                    "春眠不觉晓，",
                    "处处闻啼鸟。",
                    "夜来风雨声，",
                    "花落知多少。"
                ]
            },
            {
                "title": "赋得古原草送别",
                "author": "白居易",
                "content": [
                    "离离原上草，",
                    "一岁一枯荣。",
                    "野火烧不尽，",
                    "春风吹又生。",
                    "远芳侵古道，",
                    "晴翠接荒城。",
                    "又送王孙去，",
                    "萋萋满别情。"
                ]
            },
            {
                "title": "望庐山瀑布",
                "author": "李白",
                "content": [
                    "日照香炉生紫烟，",
                    "遥看瀑布挂前川。",
                    "飞流直下三千尺，",
                    "疑是银河落九天。"
                ]
            },
            {
                "title": "黄鹤楼送孟浩然之广陵",
                "author": "李白",
                "content": [
                    "故人西辞黄鹤楼，",
                    "烟花三月下扬州。",
                    "孤帆远影碧空尽，",
                    "唯见长江天际流。"
                ]
            }
        ]
        
        # 创建界面布局
        self.create_widgets()
        
    def create_widgets(self):
        """创建所有界面组件"""
        # 1. 顶部功能按钮区
        top_frame = tk.Frame(self.root)
        top_frame.pack(fill="x", padx=10, pady=10)
        
        # 随机推荐按钮
        random_btn = tk.Button(
            top_frame,
            text="随机推荐",
            font=("宋体", 12),
            bg="#4CAF50",
            fg="white",
            command=self.show_random_poetry
        )
        random_btn.pack(side="left", padx=5)
        
        # 字体调整按钮
        font_add_btn = tk.Button(
            top_frame,
            text="字体+",
            font=("宋体", 12),
            bg="#2196F3",
            fg="white",
            command=self.increase_font
        )
        font_add_btn.pack(side="left", padx=5)
        
        font_minus_btn = tk.Button(
            top_frame,
            text="字体-",
            font=("宋体", 12),
            bg="#2196F3",
            fg="white",
            command=self.decrease_font
        )
        font_minus_btn.pack(side="left", padx=5)
        
        # 清空按钮
        clear_btn = tk.Button(
            top_frame,
            text="清空内容",
            font=("宋体", 12),
            bg="#f44336",
            fg="white",
            command=self.clear_content
        )
        clear_btn.pack(side="left", padx=5)
        
        # 2. 主体内容区（左右分栏）
        main_frame = tk.Frame(self.root)
        main_frame.pack(fill="both", expand=True, padx=10, pady=5)
        
        # 左侧列表区
        left_frame = tk.Frame(main_frame, width=200)
        left_frame.pack(side="left", fill="y", padx=(0, 10))
        
        # 列表标题
        list_label = tk.Label(left_frame, text="唐诗列表", font=("宋体", 14, "bold"))
        list_label.pack(pady=5)
        
        # 唐诗列表（带滚动条）
        self.poetry_listbox = tk.Listbox(left_frame, font=("宋体", 12), selectmode="single")
        scrollbar = tk.Scrollbar(left_frame, orient="vertical", command=self.poetry_listbox.yview)
        self.poetry_listbox.config(yscrollcommand=scrollbar.set)
        
        # 填充列表数据
        for idx, poetry in enumerate(self.poetry_data):
            self.poetry_listbox.insert(idx, f"{poetry['title']} - {poetry['author']}")
        
        # 布局列表和滚动条
        self.poetry_listbox.pack(side="left", fill="both", expand=True)
        scrollbar.pack(side="right", fill="y")
        
        # 绑定列表选中事件
        self.poetry_listbox.bind("<<ListboxSelect>>", self.on_list_select)
        
        # 右侧内容展示区
        right_frame = tk.Frame(main_frame)
        right_frame.pack(side="right", fill="both", expand=True)
        
        # 内容标题
        content_label = tk.Label(right_frame, text="唐诗内容", font=("宋体", 14, "bold"))
        content_label.pack(pady=5)
        
        # 内容展示文本框（只读，带滚动条）
        self.content_text = tk.Text(
            right_frame,
            font=("宋体", self.font_size),
            wrap="word",
            state="disabled",
            bg="#f8f8f8",
            padx=15,
            pady=15
        )
        content_scrollbar = tk.Scrollbar(right_frame, orient="vertical", command=self.content_text.yview)
        self.content_text.config(yscrollcommand=content_scrollbar.set)
        
        # 布局内容文本框和滚动条
        self.content_text.pack(side="left", fill="both", expand=True)
        content_scrollbar.pack(side="right", fill="y")
        
    def on_list_select(self, event):
        """处理列表选中事件，显示对应唐诗内容"""
        # 获取选中的索引
        selected_indices = self.poetry_listbox.curselection()
        if not selected_indices:
            return
        idx = selected_indices[0]
        
        # 获取对应唐诗数据
        poetry = self.poetry_data[idx]
        
        # 格式化显示内容
        content = f"标题：{poetry['title']}\n"
        content += f"作者：{poetry['author']}\n\n"
        content += "\n".join(poetry['content'])
        
        # 更新文本框内容
        self.content_text.config(state="normal")
        self.content_text.delete(1.0, tk.END)
        self.content_text.insert(tk.END, content)
        self.content_text.config(state="disabled")
        
    def show_random_poetry(self):
        """随机显示一首唐诗"""
        random_idx = random.randint(0, len(self.poetry_data)-1)
        self.poetry_listbox.selection_clear(0, tk.END)
        self.poetry_listbox.selection_set(random_idx)
        self.poetry_listbox.see(random_idx)
        # 触发选中事件
        self.on_list_select(None)
        
    def increase_font(self):
        """增大字体"""
        if self.font_size < 24:
            self.font_size += 2
            self.content_text.config(font=("宋体", self.font_size))
            
    def decrease_font(self):
        """减小字体"""
        if self.font_size > 10:
            self.font_size -= 2
            self.content_text.config(font=("宋体", self.font_size))
            
    def clear_content(self):
        """清空内容展示区"""
        self.content_text.config(state="normal")
        self.content_text.delete(1.0, tk.END)
        self.content_text.config(state="disabled")
        self.poetry_listbox.selection_clear(0, tk.END)
        
    def clear_content(self):
        """清空内容展示区"""
        self.content_text.config(state="normal")
        self.content_text.delete(1.0, tk.END)
        self.content_text.config(state="disabled")
        self.poetry_listbox.selection_clear(0, tk.END)

if __name__ == "__main__":
    # 创建主窗口并运行程序
    root = tk.Tk()
    app = TangPoetryReader(root)
    root.mainloop()