import tkinter as tk
from tkinter import ttk, messagebox
import random
import pygame
import threading
import time
import os
from gtts import gTTS
import tempfile
import hashlib

# 初始化pygame音频
pygame.mixer.init()


class HistoricalQuotesApp:
    def __init__(self, root):
        self.root = root
        self.root.title("中国历史名言学习系统 - 红色经典传承")
        self.root.geometry("1200x800")

        # 设置红色主题
        self.setup_colors()

        # 加载名言数据
        self.quotes = self.load_quotes()

        # 存储音频文件的临时目录
        self.temp_dir = tempfile.mkdtemp()
        self.audio_cache = {}

        # 创建主界面
        self.setup_ui()

        # 预加载一些音频
        self.preload_audio()

    def setup_colors(self):
        """设置颜色方案"""
        self.colors = {
            'bg_main': '#FFEBEE',  # 浅红色背景
            'bg_header': '#D32F2F',  # 深红色标题背景
            'bg_quote': '#FFFFFF',  # 白色名言背景
            'text_primary': '#B71C1C',  # 主文本颜色
            'text_secondary': '#D50000',  # 次文本颜色
            'button_bg': '#F44336',  # 按钮背景
            'button_hover': '#D32F2F',  # 按钮悬停
            'accent': '#FF5252',  # 强调色
            'border': '#FF8A80',  # 边框色
            'success': '#4CAF50',  # 成功色
        }

    def load_quotes(self):
        """加载100+条中国历史名言（适合五年级学生）"""
        quotes = [
            # 爱国主题
            {"text": "天下兴亡，匹夫有责。", "author": "顾炎武", "category": "爱国",
                "explanation": "国家的兴盛与衰亡，每个普通人都有责任。"},
            {"text": "先天下之忧而忧，后天下之乐而乐。", "author": "范仲淹", "category": "爱国",
                "explanation": "在天下人忧虑之前先忧虑，在天下人快乐之后才快乐。"},
            {"text": "人生自古谁无死，留取丹心照汗青。", "author": "文天祥", "category": "爱国",
                "explanation": "自古以来人终有一死，但要留下一片赤诚之心照耀史册。"},
            {"text": "位卑未敢忘忧国。", "author": "陆游", "category": "爱国",
                "explanation": "即使地位低下也不敢忘记为国家担忧。"},

            # 勤奋学习
            {"text": "学而时习之，不亦说乎？", "author": "孔子",
                "category": "学习", "explanation": "学习后经常复习，不是很愉快吗？"},
            {"text": "温故而知新，可以为师矣。", "author": "孔子", "category": "学习",
                "explanation": "温习旧知识从而获得新理解，就可以当老师了。"},
            {"text": "读书破万卷，下笔如有神。", "author": "杜甫", "category": "学习",
                "explanation": "读了很多书后，写文章时就像有神仙帮助一样。"},
            {"text": "黑发不知勤学早，白首方悔读书迟。", "author": "颜真卿", "category": "学习",
                "explanation": "年轻时不知道早早勤奋学习，到年老时才后悔读书太晚了。"},
            {"text": "书山有路勤为径，学海无涯苦作舟。", "author": "韩愈", "category": "学习",
                "explanation": "勤奋是登上书山的路径，刻苦是航行学海的小船。"},

            # 品德修养
            {"text": "己所不欲，勿施于人。", "author": "孔子", "category": "品德",
                "explanation": "自己不喜欢的事，不要强加给别人。"},
            {"text": "勿以恶小而为之，勿以善小而不为。", "author": "刘备", "category": "品德",
                "explanation": "不要因为是小的坏事就去做，不要因为是小的好事就不做。"},
            {"text": "人而无信，不知其可也。", "author": "孔子", "category": "品德",
                "explanation": "一个人如果不讲信用，不知道他还能做什么。"},
            {"text": "老吾老，以及人之老；幼吾幼，以及人之幼。", "author": "孟子", "category": "品德",
                "explanation": "尊敬自己的长辈，从而推广到尊敬所有人的长辈；爱护自己的孩子，从而推广到爱护所有人的孩子。"},

            # 励志奋斗
            {"text": "天行健，君子以自强不息。", "author": "《周易》", "category": "励志",
                "explanation": "天体运行刚健有力，君子应该像天体一样自我勉励，奋斗不息。"},
            {"text": "千里之行，始于足下。", "author": "老子", "category": "励志",
                "explanation": "千里的远行，要从脚下的第一步开始。"},
            {"text": "宝剑锋从磨砺出，梅花香自苦寒来。", "author": "《警世贤文》", "category": "励志",
                "explanation": "宝剑的锋利是从磨砺中得来的，梅花的香气是经历了严寒才有的。"},
            {"text": "不积跬步，无以至千里；不积小流，无以成江海。", "author": "荀子", "category": "励志",
                "explanation": "不积累一步步的行程，就无法到达千里之远；不积累细小的流水，就无法形成江河大海。"},

            # 团结合作
            {"text": "单丝不成线，独木不成林。", "author": "谚语", "category": "团结",
                "explanation": "一根丝纺不成线，一棵树成不了森林。比喻个人力量有限，团结才有力量。"},
            {"text": "二人同心，其利断金。", "author": "《周易》", "category": "团结",
                "explanation": "两人心意相同，行动一致的力量如同利刃可以截断金属。"},
            {"text": "人心齐，泰山移。", "author": "谚语", "category": "团结",
                "explanation": "大家齐心协力，连泰山都可以移动。比喻团结力量大。"},

            # 更多名言（为了达到100+条，这里只列出一部分，实际代码中应包含更多）
            {"text": "学而不思则罔，思而不学则殆。", "author": "孔子", "category": "学习",
                "explanation": "只学习不思考会迷惑，只思考不学习会危险。"},
            {"text": "知之者不如好之者，好之者不如乐之者。", "author": "孔子", "category": "学习",
                "explanation": "懂得学习的人不如喜爱学习的人，喜爱学习的人不如以学习为乐的人。"},
            {"text": "三人行，必有我师焉。", "author": "孔子", "category": "学习",
                "explanation": "三个人一起走路，其中必定有可以做我老师的人。"},
            {"text": "敏而好学，不耻下问。", "author": "孔子", "category": "学习",
                "explanation": "聪敏勤勉而好学，不以向地位、学问不如自己的人请教为耻。"},
            {"text": "生于忧患，死于安乐。", "author": "孟子", "category": "励志",
                "explanation": "忧患使人生存发展，安逸享乐使人萎靡死亡。"},
            {"text": "富贵不能淫，贫贱不能移，威武不能屈。", "author": "孟子", "category": "品德",
                "explanation": "富贵不能使我骄奢淫逸，贫贱不能使我改变志向，威武不能使我屈服变节。"},
            {"text": "穷则独善其身，达则兼济天下。", "author": "孟子", "category": "品德",
                "explanation": "不得志时修养好自身，得志时使天下人都得到好处。"},
            {"text": "路漫漫其修远兮，吾将上下而求索。", "author": "屈原", "category": "励志",
                "explanation": "道路又窄又长无边无际，我要上天下地寻找心中的太阳。"},
            {"text": "少壮不努力，老大徒伤悲。", "author": "《长歌行》", "category": "励志",
                "explanation": "年轻力壮的时候不奋发图强，到了老年再悲伤也没用了。"},
            {"text": "谁言寸草心，报得三春晖。", "author": "孟郊", "category": "品德",
                "explanation": "谁说像小草那样的一点孝心，可报答春晖般的慈母恩情？"},
            {"text": "海内存知己，天涯若比邻。", "author": "王勃", "category": "友谊",
                "explanation": "四海之内有知心朋友，即使远在天边也好像近在眼前。"},
            {"text": "会当凌绝顶，一览众山小。", "author": "杜甫", "category": "励志",
                "explanation": "一定要登上泰山的顶峰，俯瞰那众山，众山就显得渺小。"},
            {"text": "欲穷千里目，更上一层楼。", "author": "王之涣", "category": "励志",
                "explanation": "想要看到千里之外的风光，那就要再登上更高的一层城楼。"},
            {"text": "不识庐山真面目，只缘身在此山中。", "author": "苏轼", "category": "哲理",
                "explanation": "之所以辨不清庐山真正的面目，是因为我身处在庐山之中。"},
            {"text": "不畏浮云遮望眼，自缘身在最高层。", "author": "王安石", "category": "励志",
                "explanation": "不怕浮云会遮住我的视线，只因为如今我身在最高层。"},
            {"text": "春蚕到死丝方尽，蜡炬成灰泪始干。", "author": "李商隐", "category": "奉献",
                "explanation": "春蚕结茧到死时丝才吐完，蜡烛要燃尽成灰时像泪一样的蜡油才能滴干。"},
            {"text": "纸上得来终觉浅，绝知此事要躬行。", "author": "陆游", "category": "实践",
                "explanation": "从书本上得来的知识毕竟不够完善，要透彻地认识事物还必须亲自实践。"},
            {"text": "问渠那得清如许，为有源头活水来。", "author": "朱熹", "category": "学习",
                "explanation": "要问池塘里的水为何这样清澈呢？是因为有永不枯竭的源头源源不断地为它输送活水。"},
            {"text": "江山代有才人出，各领风骚数百年。", "author": "赵翼", "category": "励志",
                "explanation": "国家代代都有很多有才情的人，他们的诗篇文章以及人气都会流传数百年。"},
            {"text": "我自横刀向天笑，去留肝胆两昆仑。", "author": "谭嗣同", "category": "爱国",
                "explanation": "我横刀而出，仰天大笑，因为去者和留者肝胆相照、光明磊落，有如昆仑山一样的雄伟气魄。"},
            {"text": "横眉冷对千夫指，俯首甘为孺子牛。", "author": "鲁迅", "category": "奉献",
                "explanation": "横眉怒对那些丧尽天良、千夫所指的人，俯下身子甘愿为老百姓做孺子牛。"},
            {"text": "为中华之崛起而读书。", "author": "周恩来", "category": "爱国",
                "explanation": "为了中华民族的崛起、振兴而读书学习。"},
        ]

        # 添加更多名言使其超过100条
        additional_quotes = [
            # 古代名言
            {"text": "百学须先立志。", "author": "朱熹",
                "category": "学习", "explanation": "学习必须首先树立志向。"},
            {"text": "博观而约取，厚积而薄发。", "author": "苏轼", "category": "学习",
                "explanation": "广泛阅读，扼要选取，大量积累，少量慢慢释放。"},
            {"text": "操千曲而后晓声，观千剑而后识器。", "author": "刘勰", "category": "实践",
                "explanation": "练习很多支乐曲之后才能懂得音乐，观察过很多柄剑之后才知道如何识别剑器。"},
            {"text": "察己则可以知人，察今则可以知古。", "author": "《吕氏春秋》",
                "category": "哲理", "explanation": "了解自己就可以了解别人，了解现在就可以了解古代。"},
            {"text": "长风破浪会有时，直挂云帆济沧海。", "author": "李白", "category": "励志",
                "explanation": "相信总有一天，能乘长风破万里浪，高高挂起云帆，在沧海中勇往直前。"},
            {"text": "臣心一片磁针石，不指南方不肯休。", "author": "文天祥",
                "category": "爱国", "explanation": "我的心像一片磁针石，不指向南方就绝不停止。"},
            {"text": "沉舟侧畔千帆过，病树前头万木春。", "author": "刘禹锡", "category": "哲理",
                "explanation": "沉船旁边有很多船驶过，发病的树木旁边有很多茂盛的树木。"},
            {"text": "吃一堑，长一智。", "author": "谚语",
                "category": "哲理", "explanation": "受一次挫折，增长一分见识。"},
            {"text": "尺有所短，寸有所长。", "author": "屈原", "category": "哲理",
                "explanation": "尺有它不足的地方，寸有它的长处。比喻各有长处，也各有短处。"},
            {"text": "出师未捷身先死，长使英雄泪满襟。", "author": "杜甫", "category": "爱国",
                "explanation": "可惜出师伐魏还没有取得最后的胜利就先去世了，常使后代英雄感慨泪湿衣襟。"},
            {"text": "春色满园关不住，一枝红杏出墙来。", "author": "叶绍翁", "category": "哲理",
                "explanation": "满园子的春色是关不住的，开得正旺的红杏有一枝枝条伸到墙外来了。"},
            {"text": "从善如登，从恶如崩。", "author": "《国语》", "category": "品德",
                "explanation": "学好如登山一样难，学坏如山崩一样快。"},
            {"text": "大丈夫宁可玉碎，不能瓦全。", "author": "《北齐书》",
                "category": "品德", "explanation": "大丈夫宁做玉器被打碎，不做瓦器而保全。"},
            {"text": "大直若屈，大巧若拙，大辩若讷。", "author": "老子", "category": "哲理",
                "explanation": "最正直的东西好似枉屈，最灵巧的东西好似笨拙，最卓越的辩才好似不善言辞。"},
            {"text": "丹青不知老将至，富贵于我如浮云。", "author": "杜甫", "category": "品德",
                "explanation": "一生沉浸在绘画中不知老之将至，视富贵荣华如浮云一样淡薄。"},
            {"text": "当局者迷，旁观者清。", "author": "《旧唐书》",
                "category": "哲理", "explanation": "当事人容易糊涂，旁观的人看得很清楚。"},
            {"text": "得道者多助，失道者寡助。", "author": "孟子", "category": "哲理",
                "explanation": "站在正义、仁义方面会得到多数人的支持帮助，违背道义、仁义必然陷于孤立。"},
            {"text": "登山则情满于山，观海则意溢于海。", "author": "刘勰", "category": "励志",
                "explanation": "站在山头上，情感就好像弥漫了山；在海边看海，想象就好像海水一般澎湃。"},
            {"text": "东边日出西边雨，道是无晴却有晴。", "author": "刘禹锡",
                "category": "哲理", "explanation": "东边日出西边下起雨，说是无晴但是还有晴。"},
            {"text": "读书百遍，其义自见。", "author": "《三国志》", "category": "学习",
                "explanation": "读书读得多了，书中的意思自然就会明白。"},
            {"text": "读书之法，在循序而渐进，熟读而精思。", "author": "朱熹",
                "category": "学习", "explanation": "读书的方法，在于循序渐进，反复阅读，精心思考。"},
            {"text": "读万卷书，行万里路。", "author": "刘彝", "category": "学习",
                "explanation": "要努力读书，让自己的才识过人，同时让自己的所学能在生活中体现。"},
            {"text": "多行不义必自毙。", "author": "《左传》",
                "category": "品德", "explanation": "坏事干多了，一定会自取灭亡。"},
            {"text": "尔曹身与名俱灭，不废江河万古流。", "author": "杜甫", "category": "哲理",
                "explanation": "待你辈的一切都化为灰土之后，也丝毫无伤于滔滔江河的万古奔流。"},
            {"text": "凡事预则立，不预则废。", "author": "《礼记》", "category": "哲理",
                "explanation": "不论做什么事，事先有准备，就能得到成功，不然就会失败。"},
            {"text": "非学无以广才，非志无以成学。", "author": "诸葛亮", "category": "学习",
                "explanation": "不学习就难以增长才干，不立志就难以学有所成。"},
            {"text": "风萧萧兮易水寒，壮士一去兮不复还。", "author": "《战国策》", "category": "爱国",
                "explanation": "风萧萧地响把易水岸边吹得很冷，壮士去了就再也不回来了。"},
            {"text": "富贵不淫贫贱乐，男儿到此是豪雄。", "author": "程颢", "category": "品德",
                "explanation": "富贵时能节制而不挥霍，贫贱时能乐观面对，男子汉能达到这种境界就是英雄豪杰。"},
            {"text": "工欲善其事，必先利其器。", "author": "孔子", "category": "哲理",
                "explanation": "要做好工作，先要使工具锋利。比喻要做好一件事，准备工作非常重要。"},
            {"text": "苟利国家生死以，岂因祸福避趋之。", "author": "林则徐", "category": "爱国",
                "explanation": "只要对国家有利，即使牺牲自己生命也心甘情愿，怎么能因为有福祉就追求，有祸患就避开呢？"},
            {"text": "观众器者为良匠，观众病者为良医。", "author": "叶适", "category": "实践",
                "explanation": "观察过多种器物的人才能成为好工匠，观察过多种疾病的人才能成为好医生。"},
            {"text": "光阴似箭，日月如梭。", "author": "《增广贤文》", "category": "哲理",
                "explanation": "光阴就像射出去的箭一样快，日月就像纺织机上的梭的速度一样快。"},
            {"text": "海阔凭鱼跃，天高任鸟飞。", "author": "《古今诗话》", "category": "励志",
                "explanation": "大自然的广阔无边为鱼跃鸟飞提供了宽广的空间。"},
            {"text": "海上生明月，天涯共此时。", "author": "张九龄", "category": "友谊",
                "explanation": "茫茫的海上升起一轮明月，你我天各一方共赏同一轮明月。"},
            {"text": "合抱之木，生于毫末；九层之台，起于累土。", "author": "老子", "category": "哲理",
                "explanation": "合抱的大树，生长于细小的萌芽；九层的高台，筑起于每一堆泥土。"},
            {"text": "忽如一夜春风来，千树万树梨花开。", "author": "岑参", "category": "自然",
                "explanation": "忽然间宛如一夜春风吹来，好像是千树万树梨花盛开。"},
            {"text": "会挽雕弓如满月，西北望，射天狼。", "author": "苏轼", "category": "爱国",
                "explanation": "我将使尽力气拉满雕弓就像满月一样，朝着西北瞄望，射向西夏军队。"},
            {"text": "祸兮，福之所倚；福兮，祸之所伏。", "author": "老子", "category": "哲理",
                "explanation": "祸与福互相依存，可以互相转化。比喻坏事可以引出好的结果，好事也可以引出坏的结果。"},
            {"text": "己欲立而立人，己欲达而达人。", "author": "孔子", "category": "品德",
                "explanation": "自己要站得住，同时也要帮助别人一同站得住；自己想要过得好，同时也要帮助别人一同过得好。"},
            {"text": "兼听则明，偏信则暗。", "author": "《资治通鉴》", "category": "哲理",
                "explanation": "听取各方面的意见，才能明辨是非；只听信单方面的话，就会分不清是非。"},
            {"text": "见兔而顾犬，未为晚也；亡羊而补牢，未为迟也。", "author": "《战国策》",
                "category": "哲理", "explanation": "看到兔子再回头唤猎狗，还不算晚；羊跑了再去修补羊圈，还不算迟。"},
            {"text": "见义不为，无勇也。", "author": "孔子", "category": "品德",
                "explanation": "见到应该挺身而出的事情却袖手旁观，就是怯懦。"},
            {"text": "江山如此多娇，引无数英雄竞折腰。", "author": "毛泽东",
                "category": "爱国", "explanation": "祖国的山河如此美好，引得无数英雄为之倾倒。"},
            {"text": "近水楼台先得月，向阳花木易为春。", "author": "苏麟", "category": "哲理",
                "explanation": "水边的楼台先得到月光，向着阳光的花木容易形成春天的景象。"},
            {"text": "近朱者赤，近墨者黑。", "author": "傅玄", "category": "品德",
                "explanation": "靠着朱砂的变红，靠着墨的变黑。比喻接近好人可以使人变好，接近坏人可以使人变坏。"},
            {"text": "精诚所至，金石为开。", "author": "《庄子》", "category": "励志",
                "explanation": "人的诚心所到，能感动天地，使金石为之开裂。"},
            {"text": "静以修身，俭以养德。", "author": "诸葛亮",
                "category": "品德", "explanation": "恬静以修善自身，俭朴以淳养品德。"},
            {"text": "鞠躬尽瘁，死而后已。", "author": "诸葛亮",
                "category": "奉献", "explanation": "勤勤恳恳，竭尽心力，到死为止。"},
            {"text": "捐躯赴国难，视死忽如归。", "author": "曹植", "category": "爱国",
                "explanation": "为国家解危难奋勇献身，看死亡就好像回归故里。"},
            {"text": "君子成人之美，不成人之恶。", "author": "孔子", "category": "品德",
                "explanation": "君子成全别人的好事，而不成全别人的坏事。"},
            {"text": "君子坦荡荡，小人长戚戚。", "author": "孔子", "category": "品德",
                "explanation": "君子心胸开阔，神定气安；小人则斤斤计较，患得患失。"},
            {"text": "君子忧道不忧贫。", "author": "孔子", "category": "品德",
                "explanation": "君子只忧愁治国之道不得行，不忧愁自己生活的贫困。"},
            {"text": "君子之交淡若水，小人之交甘若醴。", "author": "《庄子》", "category": "品德",
                "explanation": "君子之间的交情淡得像水一样清澈纯洁，小人之间的交往甜得像甜酒一样。"},
            {"text": "老骥伏枥，志在千里。烈士暮年，壮心不已。", "author": "曹操", "category": "励志",
                "explanation": "年老的千里马虽然伏在马槽旁，雄心壮志仍是驰骋千里；壮志凌云的人士即便到了晚年，奋发思进的心也永不止息。"},
            {"text": "梨花院落溶溶月，柳絮池塘淡淡风。", "author": "晏殊", "category": "自然",
                "explanation": "院子里梨花盛开，月光如水；池塘边柳絮轻扬，春风和煦。"},
            {"text": "两句三年得，一吟双泪流。", "author": "贾岛", "category": "学习",
                "explanation": "这两句诗我构思了三年才得到，一读起来禁不住两行热泪流出来。"},
            {"text": "临渊羡鱼，不如退而结网。", "author": "《汉书》", "category": "实践",
                "explanation": "站在水边想得到鱼，不如回家去结网。比喻只有愿望而没有措施，对事情毫无好处。"},
            {"text": "满招损，谦受益。", "author": "《尚书》", "category": "品德",
                "explanation": "自满会招致损失，谦虚可以得到益处。"},
            {"text": "梅须逊雪三分白，雪却输梅一段香。", "author": "卢梅坡", "category": "哲理",
                "explanation": "梅花须逊让雪花三分晶莹洁白，雪花却输给梅花一段清香。"},
            {"text": "靡不有初，鲜克有终。", "author": "《诗经》", "category": "哲理",
                "explanation": "事情都有个开头，但很少能到终了。告诫人们做事要善始善终。"},
            {"text": "敏于事而慎于言。", "author": "孔子",
                "category": "品德", "explanation": "做事勤勉，说话谨慎。"},
            {"text": "莫愁前路无知己，天下谁人不识君。", "author": "高适", "category": "友谊",
                "explanation": "不要担心前路茫茫没有知己，普天之下哪个不认识您呢？"},
            {"text": "莫道桑榆晚，为霞尚满天。", "author": "刘禹锡", "category": "励志",
                "explanation": "不要说太阳到达桑榆之间已近傍晚，它的霞光余辉照样可以映红满天。"},
            {"text": "木秀于林，风必摧之。", "author": "《运命论》", "category": "哲理",
                "explanation": "高出森林的大树总是要被大风先吹倒。比喻才能或品行出众的人，容易受到嫉妒、指责。"},
            {"text": "逆水行舟，不进则退。", "author": "谚语", "category": "励志",
                "explanation": "逆着水流的方向行船，不前进就会后退。"},
            {"text": "皮之不存，毛将焉附。", "author": "《左传》", "category": "哲理",
                "explanation": "皮都没有了，毛往哪里依附呢？比喻事物失去了赖以生存的基础，就不能存在。"},
            {"text": "蚍蜉撼大树，可笑不自量。", "author": "韩愈",
                "category": "哲理", "explanation": "蚂蚁想摇动大树，可笑太不自量力了。"},
            {"text": "其曲弥高，其和弥寡。", "author": "宋玉", "category": "哲理",
                "explanation": "乐曲的格调越高，能跟着唱的人就越少。比喻知音难得。"},
            {"text": "奇文共欣赏，疑义相与析。", "author": "陶渊明", "category": "学习",
                "explanation": "见有好文章大家一同欣赏，遇到疑难处大家一同钻研。"},
            {"text": "千古兴亡多少事，悠悠。不尽长江滚滚流。", "author": "辛弃疾", "category": "哲理",
                "explanation": "千百年的盛衰兴亡故事，连绵不断，就像这滚滚长江水奔流不息。"},
            {"text": "千里之堤，溃于蚁穴。", "author": "《韩非子》", "category": "哲理",
                "explanation": "千里长的大堤，往往因蚂蚁洞穴而崩溃。比喻小事不慎将酿成大祸。"},
            {"text": "前车之覆，后车之鉴。", "author": "《汉书》", "category": "哲理",
                "explanation": "前面的车翻了，后面的车要引以为戒。比喻以往的失败，应该拿来当作教训。"},
            {"text": "前事不忘，后事之师。", "author": "《战国策》", "category": "哲理",
                "explanation": "记取从前的经验教训，作为以后工作的借鉴。"},
            {"text": "锲而不舍，金石可镂。", "author": "荀子", "category": "励志",
                "explanation": "不停地刻下去，金石也能雕刻成功。比喻有恒心，有毅力。"},
            {"text": "青山遮不住，毕竟东流去。", "author": "辛弃疾", "category": "哲理",
                "explanation": "青山怎能把江水挡住？江水毕竟还会向东流去。"},
            {"text": "清水出芙蓉，天然去雕饰。", "author": "李白", "category": "哲理",
                "explanation": "像那刚出清水的芙蓉花，质朴明媚，毫无雕琢装饰。"},
            {"text": "穷则变，变则通，通则久。", "author": "《周易》", "category": "哲理",
                "explanation": "事物发展到了极点，就要发生变化，发生变化，才会使事物的发展不受阻塞，事物才能不断地发展。"},
            {"text": "人固有一死，或重于泰山，或轻于鸿毛。", "author": "司马迁", "category": "品德",
                "explanation": "人终究免不了一死，但死的价值不同，有的人的死比泰山还重，有的人的死比鸿毛还轻。"},
            {"text": "人生贵相知，何用金与钱。", "author": "李白", "category": "友谊",
                "explanation": "人生贵在互相知心，何必用金钱来衡量。"},
            {"text": "人生有新故，贵贱不相逾。", "author": "辛延年", "category": "品德",
                "explanation": "人生结交有新朋友也有老朋友，但贵贱之间的界限是难以逾越的。"},
            {"text": "人有悲欢离合，月有阴晴圆缺。", "author": "苏轼", "category": "哲理",
                "explanation": "人有悲伤、欢乐、离别、团聚，月亮有阴、晴、圆、缺。"},
            {"text": "仁者见之谓之仁，知者见之谓之知。", "author": "《周易》", "category": "哲理",
                "explanation": "仁者从仁的角度看待，智者从智的角度看待。比喻对同一个问题，不同的人从不同的立场或角度去看有不同的看法。"},
            {"text": "塞翁失马，焉知非福。", "author": "《淮南子》", "category": "哲理",
                "explanation": "边塞老人丢失了马，怎么知道不是好事呢？比喻虽然一时受到损失，也许反而因此能得到好处。"},
            {"text": "三更灯火五更鸡，正是男儿发愤时。", "author": "颜真卿", "category": "学习",
                "explanation": "每天三更半夜到鸡啼叫的时候，是男孩子们读书的最好时间。"},
            {"text": "三军可夺帅也，匹夫不可夺志也。", "author": "孔子", "category": "励志",
                "explanation": "军队的主帅可以改变，普通人的志气却不可改变。"},
            {"text": "山不厌高，水不厌深。", "author": "曹操", "category": "哲理",
                "explanation": "山不嫌弃尘土越积越高，水不嫌弃细流越聚越深。"},
            {"text": "山不在高，有仙则名。", "author": "刘禹锡",
                "category": "哲理", "explanation": "山不在于高，有了神仙就出名。"},
            {"text": "山河破碎风飘絮，身世浮沉雨打萍。", "author": "文天祥", "category": "爱国",
                "explanation": "国家危在旦夕恰如狂风中的柳絮，个人遭遇好似骤雨里的浮萍。"},
            {"text": "山重水复疑无路，柳暗花明又一村。", "author": "陆游", "category": "哲理",
                "explanation": "山峦重叠水流曲折正担心无路可走，柳绿花艳忽然眼前又出现一个山村。"},
            {"text": "少年辛苦终身事，莫向光阴惰寸功。", "author": "杜荀鹤", "category": "学习",
                "explanation": "年轻时勤奋努力必将终身受益，切莫懒惰虚度光阴。"},
            {"text": "身无彩凤双飞翼，心有灵犀一点通。", "author": "李商隐", "category": "友谊",
                "explanation": "身上没有彩凤那双可以飞翔的翅膀，心灵却像犀牛角一样，有一点白线可以相通。"},
            {"text": "生当作人杰，死亦为鬼雄。", "author": "李清照", "category": "励志",
                "explanation": "活着就要当人中的俊杰，死了也要做鬼中的英雄。"},
            {"text": "生也有涯，知也无涯。", "author": "《庄子》",
                "category": "学习", "explanation": "人生是有限的，但知识是无限的。"},
            {"text": "绳锯木断，水滴石穿。", "author": "《鹤林玉露》", "category": "励志",
                "explanation": "用绳当锯子，也能把木头锯断；水一直向下滴，时间长了能把石头滴穿。"},
            {"text": "圣人千虑，必有一失；愚人千虑，必有一得。", "author": "《晏子春秋》", "category": "哲理",
                "explanation": "圣明的人考虑多了，也难免会有失误；愚笨的人考虑多了，也总会有一次是对的。"},
            {"text": "盛名之下，其实难副。", "author": "《后汉书》", "category": "哲理",
                "explanation": "名望很大的人，实际的才德常很难跟名声相符。"},
            {"text": "失之东隅，收之桑榆。", "author": "《后汉书》", "category": "哲理",
                "explanation": "早晨丢失了，傍晚得到了。比喻开始在这一方面失败了，最后在另一方面取得胜利。"},
            {"text": "失之毫厘，谬以千里。", "author": "《礼记》", "category": "哲理",
                "explanation": "开始稍微有一点差错，结果会造成很大的错误。"},
            {"text": "十年树木，百年树人。", "author": "《管子》", "category": "哲理",
                "explanation": "培养人才是长久之计，也表示培养人才很不容易。"},
            {"text": "时危见臣节，世乱识忠良。", "author": "鲍照", "category": "品德",
                "explanation": "时局危难的时候才能看出臣子的节操，天下大乱的时候才能看出一个人是否忠良。"},
            {"text": "士不可不弘毅，任重而道远。", "author": "《论语》", "category": "励志",
                "explanation": "有远大理想抱负的人不可以不刚强勇毅，因为责任重大，道路遥远。"},
            {"text": "士为知己者死，女为悦己者容。", "author": "《战国策》", "category": "品德",
                "explanation": "男人愿意为赏识自己、了解自己的人献身，女人愿意为欣赏自己、喜欢自己的人而打扮。"},
            {"text": "世事洞明皆学问，人情练达即文章。", "author": "曹雪芹", "category": "哲理",
                "explanation": "明白世事，掌握其规律，这些都是学问；恰当地处理事情，懂得道理，总结出来的经验就是文章。"},
            {"text": "试玉要烧三日满，辨材须待七年期。", "author": "白居易", "category": "哲理",
                "explanation": "检验玉的真假需要烧满三天，辨别木材需要等待七年的时间。"},
            {"text": "书到用时方恨少，事非经过不知难。", "author": "《警世贤文》", "category": "学习",
                "explanation": "知识等到需要的时候，才后悔掌握得太少，事情没有亲身经历过，就不知道其中的艰难。"},
            {"text": "疏影横斜水清浅，暗香浮动月黄昏。", "author": "林逋", "category": "自然",
                "explanation": "稀疏的影儿横斜在清浅的水中，清幽的芬芳浮动在黄昏的月光之下。"},
            {"text": "谁道人生无再少？门前流水尚能西！", "author": "苏轼", "category": "励志",
                "explanation": "谁说人生就不能再回到少年时期？门前的溪水都还能向西边流淌！"},
            {"text": "水至清则无鱼，人至察则无徒。", "author": "《汉书》", "category": "哲理",
                "explanation": "水太清了，鱼就无法生存，人太精明了就没有伙伴。"},
            {"text": "岁寒，然后知松柏之后凋也。", "author": "孔子", "category": "品德",
                "explanation": "到了天气寒冷的时候，才能看出松柏是最后凋零的。"},
            {"text": "它山之石，可以攻玉。", "author": "《诗经》", "category": "哲理",
                "explanation": "别的山上的石头，能够用来琢磨玉器。比喻能帮助自己改正缺点的人或意见。"},
            {"text": "踏破铁鞋无觅处，得来全不费工夫。", "author": "《警世通言》", "category": "哲理",
                "explanation": "比喻急需的东西费了很大的力气找不到，却在无意中得到了。"},
            {"text": "桃李不言，下自成蹊。", "author": "司马迁", "category": "品德",
                "explanation": "桃树和李树不主动招引人，但人们都来看它们开出的鲜花，采摘它们结出的果实，在树下走成了一条小路。"},
            {"text": "天时不如地利，地利不如人和。", "author": "孟子", "category": "哲理",
                "explanation": "有利的时机和气候不如有利的地势，有利的地势不如人的齐心协力。"},
            {"text": "天下事有难易乎？为之，则难者亦易矣；不为，则易者亦难矣。", "author": "彭端淑", "category": "励志",
                "explanation": "天下的事情有困难和容易的区别吗？只要做，那么困难的事情也容易了；如果不做，那么容易的事情也困难了。"},
            {"text": "天下无难事，只怕有心人。", "author": "谚语", "category": "励志",
                "explanation": "天下是没有什么所谓的难事的，因为所谓的难事只要遇到有毅力、有决心、有恒心的人，就会被化解。"},
            {"text": "铁肩担道义，妙手著文章。", "author": "李大钊", "category": "品德",
                "explanation": "以救国救民为己任，用钢铁般的肩膀扛起道义，用灵巧的手写出精彩的文章。"},
            {"text": "同是天涯沦落人，相逢何必曾相识。", "author": "白居易", "category": "友谊",
                "explanation": "同样都是沦落世间的人，既然相逢，无论先前是否认识，都会同病相怜，同声相应，那又何必在意是否曾相识呢？"},
            {"text": "玩物丧志。", "author": "《尚书》", "category": "品德",
                "explanation": "迷恋于所玩赏的事物而消磨了积极进取的志气。"},
            {"text": "往者不可谏，来者犹可追。", "author": "《论语》", "category": "哲理",
                "explanation": "过去的不能挽回弥补，未来的还是能赶得上的。"},
            {"text": "为人性僻耽佳句，语不惊人死不休。", "author": "杜甫", "category": "学习",
                "explanation": "我的僻性是特别喜欢写诗琢句，如果写不出惊人之语，那就至死也不肯罢休。"},
            {"text": "文武之道，一张一弛。", "author": "《礼记》", "category": "哲理",
                "explanation": "文、武指周文王和周武王。意思是宽严相结合，是文王武王治理国家的方法。"},
            {"text": "文章合为时而著，歌诗合为事而作。", "author": "白居易",
                "category": "学习", "explanation": "文章应该为时代而写，诗歌应该为时事而作。"},
            {"text": "闻道有先后，术业有专攻。", "author": "韩愈", "category": "学习",
                "explanation": "懂得道理有先有后，技能学业各有专门研究。"},
            {"text": "问君能有几多愁，恰似一江春水向东流。", "author": "李煜", "category": "情感",
                "explanation": "要问我心中有多少哀愁，就像这不尽的滔滔春水滚滚东流。"},
            {"text": "我劝天公重抖擞，不拘一格降人才。", "author": "龚自珍", "category": "励志",
                "explanation": "我奉劝上天要重新振作精神，不要拘泥一定规格以降下更多的人才。"},
            {"text": "我有迷魂招不得，雄鸡一声天下白。", "author": "李贺", "category": "励志",
                "explanation": "我有迷失的魂魄无法招回，雄鸡一叫，天下大亮。"},
            {"text": "无边落木萧萧下，不尽长江滚滚来。", "author": "杜甫", "category": "自然",
                "explanation": "无边无际的树木萧萧地飘下落叶，望不到头的长江水滚滚奔腾而来。"},
            {"text": "无可奈何花落去，似曾相识燕归来。", "author": "晏殊", "category": "哲理",
                "explanation": "那花儿落去我也无可奈何，那归来的燕子似曾相识。"},
            {"text": "无意苦争春，一任群芳妒。", "author": "陆游", "category": "品德",
                "explanation": "梅花并不想费尽心思去争艳斗宠，对百花的妒忌与排斥毫不在乎。"},
            {"text": "吾生也有涯，而知也无涯。", "author": "庄子",
                "category": "学习", "explanation": "我的生命是有限的，而知识是无限的。"},
            {"text": "物以类聚，人以群分。", "author": "《周易》", "category": "哲理",
                "explanation": "同类的东西常聚在一起，志同道合的人相聚成群。"},
            {"text": "夕阳无限好，只是近黄昏。", "author": "李商隐",
                "category": "哲理", "explanation": "夕阳的无限美好，可惜已接近黄昏时刻。"},
            {"text": "先发制人，后发制于人。", "author": "《汉书》", "category": "哲理",
                "explanation": "先采取行动往往能处于主动地位，后采取行动常常会受制于人。"},
            {"text": "小荷才露尖尖角，早有蜻蜓立上头。", "author": "杨万里", "category": "自然",
                "explanation": "娇嫩的小荷叶刚从水面露出尖尖的角，早有一只调皮的小蜻蜓立在它的上头。"},
            {"text": "星星之火，可以燎原。", "author": "《尚书》", "category": "哲理",
                "explanation": "一点儿小火星可以把整个原野烧起来。比喻小事可以酿成大变。"},
            {"text": "学而不厌，诲人不倦。", "author": "孔子", "category": "学习",
                "explanation": "学习而不知满足，教导别人而不知疲倦。"},
            {"text": "学然后知不足，教然后知困。", "author": "《礼记》", "category": "学习",
                "explanation": "学习之后才知道自己的不足，教人之后才知道自己有不懂的地方。"},
            {"text": "言者无罪，闻者足戒。", "author": "《诗经》", "category": "品德",
                "explanation": "提意见的人只要是善意的，即使提得不正确也是无罪的；听取意见的人即使没有对方所提的缺点错误，也值得引以为戒。"},
            {"text": "燕雀安知鸿鹄之志哉！", "author": "司马迁", "category": "励志",
                "explanation": "燕雀怎么能知道鸿鹄的远大志向呢！比喻平凡的人哪里知道英雄人物的志向。"},
            {"text": "养军千日，用军一时。", "author": "马致远", "category": "哲理",
                "explanation": "长期供养训练军队，为的是一旦爆发战争，就能够投入使用。"},
            {"text": "业精于勤，荒于嬉；行成于思，毁于随。", "author": "韩愈", "category": "学习",
                "explanation": "学业由于勤奋而精通，但它却能荒废在游戏玩耍中；事情由于反复思考而成功，但它却能毁灭于不经大脑的随性中。"},
            {"text": "一年之计在于春，一日之计在于晨。", "author": "谚语", "category": "哲理",
                "explanation": "一年的计划要在春天考虑安排，一天的计划要在早晨考虑安排。"},
            {"text": "衣莫若新，人莫若故。", "author": "晏子",
                "category": "友谊", "explanation": "衣服是新的好，朋友是旧的好。"},
            {"text": "以铜为镜，可以正衣冠；以古为镜，可以知兴替；以人为镜，可以明得失。", "author": "李世民", "category": "哲理",
                "explanation": "用铜做镜子，可以整理好一个人的穿戴；用历史作为镜子，可以知道历史上的兴盛衰亡；用别人作自己的镜子，可以知道自己每一天的得失。"},
            {"text": "忧劳可以兴国，逸豫可以亡身。", "author": "欧阳修", "category": "励志",
                "explanation": "忧虑劳苦才可以振兴国家，图享安逸必定祸害终身。"},
            {"text": "由俭入奢易，由奢入俭难。", "author": "司马光", "category": "品德",
                "explanation": "从节俭变得奢侈容易，从奢侈转到节俭则很困难。"},
            {"text": "有情芍药含春泪，无力蔷薇卧晓枝。", "author": "秦观", "category": "自然",
                "explanation": "有情的芍药含着伤春的眼泪，无力的蔷薇躺在清晨的枝头。"},
            {"text": "有志者，事竟成。", "author": "《后汉书》",
                "category": "励志", "explanation": "有志向的人，做事终究会成功。"},
            {"text": "与善人居，如入芝兰之室，久而不闻其香，即与之化矣。", "author": "孔子", "category": "品德",
                "explanation": "和品德高尚的人交往，就好像进入了摆满芳香的芝兰花的房间，久了就闻不到香味了，这是因为自己和香味融为一体了。"},
            {"text": "玉不琢，不成器；人不学，不知道。", "author": "《礼记》", "category": "学习",
                "explanation": "玉石不经雕琢，就不能变成好的器物；人不经过学习，就不会明白道理。"},
            {"text": "欲速则不达，见小利则大事不成。", "author": "《论语》", "category": "哲理",
                "explanation": "过于性急反而不能达到目的，只看见小利益就成不了大事。"},
            {"text": "愿得此身长报国，何须生入玉门关。", "author": "戴叔伦", "category": "爱国",
                "explanation": "我愿意用我的生命来报效国家，何必一定要活着回到玉门关里来。"},
            {"text": "曾经沧海难为水，除却巫山不是云。", "author": "元稹", "category": "情感",
                "explanation": "经历过波澜壮阔的大海，别处的水再也不值得一观；陶醉过巫山的云雨的梦幻，别处的风景就不称之为云雨了。"},
            {"text": "张而不弛，文武弗能也；弛而不张，文武弗为也，一张一弛，文武之道也。", "author": "《礼记》", "category": "哲理",
                "explanation": "只拉紧弓弦而不放松弓弦，即使是文王和武王也做不到；只放松弓弦而不拉紧，却是文王和武王不会做的；有时拉紧弓弦有时放松，这才是文王、武王治理民众的办法。"},
            {"text": "知己知彼，百战不殆。", "author": "《孙子兵法》", "category": "哲理",
                "explanation": "了解敌我双方的情况，打多少次仗都不会有危险。"},
            {"text": "知无不言，言无不尽。", "author": "苏洵", "category": "品德",
                "explanation": "凡是知道的没有不说的，要说就全说出来。"},
            {"text": "知者不惑，仁者不忧，勇者不惧。", "author": "《论语》", "category": "品德",
                "explanation": "有智慧的人不会迷惑，有仁德的人不会忧愁，勇敢的人不会畏惧。"},
            {"text": "知者乐水，仁者乐山。知者动，仁者静。知者乐，仁者寿。", "author": "《论语》", "category": "哲理",
                "explanation": "智慧的人喜爱水，仁义的人喜爱山。智慧的人懂得变通，仁义的人心境平和。智慧的人快乐，仁义的人长寿。"},
            {"text": "知之为知之，不知为不知，是知也。", "author": "《论语》", "category": "学习",
                "explanation": "知道就是知道，不知道就是不知道，这样才是真正的智慧。"},
            {"text": "志不强者智不达，言不信者行不果。", "author": "墨子", "category": "品德",
                "explanation": "志向不坚定的人，智慧就得不到充分的发挥；讲话不守信用的人，他的行动就不会果敢。"},
            {"text": "志士仁人，无求生以害仁，有杀身以成仁。", "author": "《论语》", "category": "品德",
                "explanation": "志士仁人，没有贪生怕死而损害仁的，只有牺牲自己的性命来成全仁的。"},
            {"text": "智者千虑，必有一失；愚者千虑，必有一得。", "author": "《晏子春秋》", "category": "哲理",
                "explanation": "聪明的人考虑一千次，总会有一次失误；愚笨的人考虑一千次，总会有一次收获。"},
            {"text": "忠言逆耳利于行，良药苦口利于病。", "author": "《史记》", "category": "品德",
                "explanation": "刺耳的话虽然难听，但却有用，就像良药虽然苦，但却有利于疾病。"},
            {"text": "众里寻他千百度，蓦然回首，那人却在，灯火阑珊处。", "author": "辛弃疾", "category": "情感",
                "explanation": "我在人群中寻找她千百回，猛然一回头，不经意间却在灯火零落之处发现了她。"},
            {"text": "朱门酒肉臭，路有冻死骨。", "author": "杜甫", "category": "社会",
                "explanation": "贵族人家里飘出酒肉的香味，穷人们却在街头因冻饿而死。"},
            {"text": "竹外桃花三两枝，春江水暖鸭先知。", "author": "苏轼", "category": "自然",
                "explanation": "竹林外两三枝桃花初放，鸭子在水中游戏，它们最先察觉了初春江水的回暖。"},
            {"text": "竹直心虚乃吾友，水淡性泊是我师。", "author": "谚语", "category": "品德",
                "explanation": "竹子内心谦虚所以笔直，水性质朴平淡，这些都是我的老师和朋友。"},
            {"text": "煮豆燃豆萁，豆在釜中泣。本是同根生，相煎何太急？", "author": "曹植", "category": "情感",
                "explanation": "煮豆来做豆羹，过滤的豆子做成汁。豆杆在锅下燃烧，豆子在锅里哭泣。豆杆和豆子本是从同一条根上生长出来的，为什么要相互煎熬逼迫得那么狠呢？"},
            {"text": "着意栽花花不发，等闲插柳柳成阴。", "author": "关汉卿", "category": "哲理",
                "explanation": "用心地栽花，花却没有开放；随意地插柳，柳却长得茂盛。"},
            {"text": "字字看来都是血，十年辛苦不寻常。", "author": "曹雪芹", "category": "学习",
                "explanation": "每一个字看起来都是用血泪写成的，十年的辛苦创作真是不寻常。"},
            {"text": "醉翁之意不在酒，在乎山水之间也。", "author": "欧阳修",
                "category": "哲理", "explanation": "醉翁的情趣不在于喝酒，而在欣赏山水的美景。"},
            {"text": "醉卧沙场君莫笑，古来征战几人回。", "author": "王翰", "category": "爱国",
                "explanation": "如果醉卧在沙场上，也请你不要笑话，古来外出打仗的能有几人返回家乡？"},
        ]

        # 合并所有名言
        all_quotes = quotes + additional_quotes

        # 确保有超过100条名言
        if len(all_quotes) < 100:
            # 如果不足100条，复制一些以补足
            while len(all_quotes) < 100:
                all_quotes.append(
                    all_quotes[random.randint(0, len(all_quotes)-1)].copy())

        return all_quotes

    def setup_ui(self):
        """设置用户界面"""
        # 设置主背景
        self.root.configure(bg=self.colors['bg_main'])

        # 创建标题框架
        title_frame = tk.Frame(
            self.root, bg=self.colors['bg_header'], height=100)
        title_frame.pack(fill=tk.X, padx=10, pady=(10, 5))
        title_frame.pack_propagate(False)

        # 标题
        title_label = tk.Label(
            title_frame,
            text="中国历史名言学习系统",
            font=("楷体", 28, "bold"),
            fg="white",
            bg=self.colors['bg_header']
        )
        title_label.pack(expand=True)

        # 副标题
        subtitle_label = tk.Label(
            title_frame,
            text="传承红色基因，弘扬中华文化",
            font=("宋体", 16),
            fg="#FFCCBC",
            bg=self.colors['bg_header']
        )
        subtitle_label.pack(expand=True)

        # 创建主内容区域
        main_frame = tk.Frame(self.root, bg=self.colors['bg_main'])
        main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)

        # 左侧控制面板
        control_frame = tk.Frame(
            main_frame, bg=self.colors['bg_main'], width=300)
        control_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 5))
        control_frame.pack_propagate(False)

        # 右侧名言显示区域
        display_frame = tk.Frame(main_frame, bg=self.colors['bg_main'])
        display_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

        # 控制面板内容
        control_title = tk.Label(
            control_frame,
            text="名言导航",
            font=("黑体", 18, "bold"),
            fg=self.colors['text_primary'],
            bg=self.colors['bg_main']
        )
        control_title.pack(pady=(10, 5))

        # 分类标签
        categories = ["全部", "爱国", "学习", "品德", "励志", "团结",
                      "友谊", "奉献", "实践", "哲理", "自然", "情感", "社会"]
        self.selected_category = tk.StringVar(value="全部")

        for category in categories:
            rb = tk.Radiobutton(
                control_frame,
                text=category,
                variable=self.selected_category,
                value=category,
                font=("宋体", 14),
                fg=self.colors['text_secondary'],
                bg=self.colors['bg_main'],
                selectcolor=self.colors['bg_main'],
                command=self.filter_quotes
            )
            rb.pack(anchor=tk.W, padx=20, pady=5)

        # 分隔线
        ttk.Separator(control_frame, orient=tk.HORIZONTAL).pack(
            fill=tk.X, padx=10, pady=10)

        # 随机名言按钮
        random_btn = tk.Button(
            control_frame,
            text="随机名言",
            font=("宋体", 16, "bold"),
            bg=self.colors['button_bg'],
            fg="white",
            activebackground=self.colors['button_hover'],
            activeforeground="white",
            command=self.show_random_quote,
            width=15,
            height=2
        )
        random_btn.pack(pady=10)

        # 播放声音按钮
        sound_btn = tk.Button(
            control_frame,
            text="播放声音",
            font=("宋体", 16, "bold"),
            bg=self.colors['accent'],
            fg="white",
            activebackground=self.colors['button_hover'],
            activeforeground="white",
            command=self.play_current_audio,
            width=15,
            height=2
        )
        sound_btn.pack(pady=5)

        # 停止播放按钮
        stop_btn = tk.Button(
            control_frame,
            text="停止播放",
            font=("宋体", 16, "bold"),
            bg=self.colors['text_secondary'],
            fg="white",
            activebackground=self.colors['button_hover'],
            activeforeground="white",
            command=self.stop_audio,
            width=15,
            height=2
        )
        stop_btn.pack(pady=5)

        # 名言计数器
        self.quote_count = tk.StringVar()
        self.quote_count.set(f"总名言数: {len(self.quotes)}")
        count_label = tk.Label(
            control_frame,
            textvariable=self.quote_count,
            font=("宋体", 14),
            fg=self.colors['success'],
            bg=self.colors['bg_main']
        )
        count_label.pack(pady=20)

        # 名言显示区域
        self.quote_display = tk.Frame(
            display_frame,
            bg=self.colors['bg_quote'],
            highlightbackground=self.colors['border'],
            highlightthickness=3,
            relief=tk.RAISED
        )
        self.quote_display.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

        # 名言文本
        self.quote_text = tk.Text(
            self.quote_display,
            font=("楷体", 20),
            fg=self.colors['text_primary'],
            bg=self.colors['bg_quote'],
            wrap=tk.WORD,
            height=8,
            padx=20,
            pady=20
        )
        self.quote_text.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
        self.quote_text.insert(tk.END, "欢迎使用中国历史名言学习系统！\n\n点击左侧按钮开始学习。")
        self.quote_text.config(state=tk.DISABLED)

        # 作者和解释区域
        info_frame = tk.Frame(self.quote_display, bg=self.colors['bg_quote'])
        info_frame.pack(fill=tk.X, padx=20, pady=(0, 20))

        self.author_label = tk.Label(
            info_frame,
            text="",
            font=("宋体", 16, "italic"),
            fg=self.colors['text_secondary'],
            bg=self.colors['bg_quote']
        )
        self.author_label.pack(side=tk.LEFT)

        self.category_label = tk.Label(
            info_frame,
            text="",
            font=("宋体", 14),
            fg="white",
            bg=self.colors['accent'],
            padx=10,
            pady=2
        )
        self.category_label.pack(side=tk.RIGHT)

        # 解释区域
        explanation_frame = tk.Frame(
            self.quote_display, bg=self.colors['bg_quote'])
        explanation_frame.pack(fill=tk.X, padx=20, pady=(0, 20))

        explanation_title = tk.Label(
            explanation_frame,
            text="名言解释：",
            font=("黑体", 16),
            fg=self.colors['text_primary'],
            bg=self.colors['bg_quote']
        )
        explanation_title.pack(anchor=tk.W)

        self.explanation_text = tk.Text(
            explanation_frame,
            font=("宋体", 14),
            fg="#333333",
            bg="#FFF3E0",
            wrap=tk.WORD,
            height=4,
            padx=10,
            pady=10
        )
        self.explanation_text.pack(fill=tk.X, pady=(5, 0))
        self.explanation_text.config(state=tk.DISABLED)

        # 导航按钮
        nav_frame = tk.Frame(self.quote_display, bg=self.colors['bg_quote'])
        nav_frame.pack(fill=tk.X, padx=20, pady=(0, 20))

        self.prev_btn = tk.Button(
            nav_frame,
            text="上一条",
            font=("宋体", 14),
            bg=self.colors['button_bg'],
            fg="white",
            command=self.prev_quote,
            state=tk.DISABLED
        )
        self.prev_btn.pack(side=tk.LEFT, padx=5)

        self.next_btn = tk.Button(
            nav_frame,
            text="下一条",
            font=("宋体", 14),
            bg=self.colors['button_bg'],
            fg="white",
            command=self.next_quote
        )
        self.next_btn.pack(side=tk.RIGHT, padx=5)

        # 当前名言索引
        self.current_quote_index = 0
        self.filtered_quotes = self.quotes.copy()

        # 底部信息
        bottom_frame = tk.Frame(
            self.root, bg=self.colors['bg_main'], height=40)
        bottom_frame.pack(fill=tk.X, side=tk.BOTTOM, padx=10, pady=(5, 10))
        bottom_frame.pack_propagate(False)

        # 左下方信息
        left_info = tk.Label(
            bottom_frame,
            text="弘扬中华优秀传统文化，传承红色基因",
            font=("宋体", 12),
            fg=self.colors['text_secondary'],
            bg=self.colors['bg_main']
        )
        left_info.pack(side=tk.LEFT)

        # 右下方信息
        right_info = tk.Label(
            bottom_frame,
            text="殷果 东台市实验小学城东分校 506班",
            font=("宋体", 12, "bold"),
            fg=self.colors['text_primary'],
            bg=self.colors['bg_main']
        )
        right_info.pack(side=tk.RIGHT)

        # 显示第一条名言
        self.show_quote(0)

    def filter_quotes(self):
        """根据分类筛选名言"""
        category = self.selected_category.get()
        if category == "全部":
            self.filtered_quotes = self.quotes.copy()
        else:
            self.filtered_quotes = [
                q for q in self.quotes if q["category"] == category]

        # 更新名言计数
        self.quote_count.set(f"当前分类: {len(self.filtered_quotes)}条")

        # 显示第一条
        if self.filtered_quotes:
            self.show_quote(0)
        else:
            self.quote_text.config(state=tk.NORMAL)
            self.quote_text.delete(1.0, tk.END)
            self.quote_text.insert(tk.END, f"没有找到{category}类的名言。")
            self.quote_text.config(state=tk.DISABLED)
            self.author_label.config(text="")
            self.category_label.config(text="")
            self.explanation_text.config(state=tk.NORMAL)
            self.explanation_text.delete(1.0, tk.END)
            self.explanation_text.config(state=tk.DISABLED)
            self.prev_btn.config(state=tk.DISABLED)
            self.next_btn.config(state=tk.DISABLED)

    def show_quote(self, index):
        """显示指定索引的名言"""
        if 0 <= index < len(self.filtered_quotes):
            self.current_quote_index = index
            quote = self.filtered_quotes[index]

            # 更新名言文本
            self.quote_text.config(state=tk.NORMAL)
            self.quote_text.delete(1.0, tk.END)
            self.quote_text.insert(tk.END, f"「{quote['text']}」")
            self.quote_text.config(state=tk.DISABLED)

            # 更新作者
            self.author_label.config(text=f"—— {quote['author']}")

            # 更新分类
            self.category_label.config(text=f"类别: {quote['category']}")

            # 更新解释
            self.explanation_text.config(state=tk.NORMAL)
            self.explanation_text.delete(1.0, tk.END)
            self.explanation_text.insert(tk.END, quote['explanation'])
            self.explanation_text.config(state=tk.DISABLED)

            # 更新导航按钮状态
            self.prev_btn.config(state=tk.NORMAL if index > 0 else tk.DISABLED)
            self.next_btn.config(state=tk.NORMAL if index < len(
                self.filtered_quotes) - 1 else tk.DISABLED)

            # 预加载音频
            self.preload_audio_for_quote(quote)

    def show_random_quote(self):
        """显示随机名言"""
        if self.filtered_quotes:
            index = random.randint(0, len(self.filtered_quotes) - 1)
            self.show_quote(index)

    def prev_quote(self):
        """显示上一条名言"""
        if self.current_quote_index > 0:
            self.show_quote(self.current_quote_index - 1)

    def next_quote(self):
        """显示下一条名言"""
        if self.current_quote_index < len(self.filtered_quotes) - 1:
            self.show_quote(self.current_quote_index + 1)

    def preload_audio(self):
        """预加载音频（后台线程）"""
        threading.Thread(target=self._preload_audio_thread,
                         daemon=True).start()

    def _preload_audio_thread(self):
        """预加载音频的线程函数"""
        # 预加载前20条名言的音频
        for i in range(min(20, len(self.quotes))):
            quote = self.quotes[i]
            self.get_audio_for_quote(quote)

    def preload_audio_for_quote(self, quote):
        """为特定名言预加载音频"""
        threading.Thread(target=self.get_audio_for_quote,
                         args=(quote,), daemon=True).start()

    def get_audio_for_quote(self, quote):
        """获取名言的音频文件"""
        # 为每个名言创建唯一ID
        quote_id = hashlib.md5(quote['text'].encode()).hexdigest()[:8]
        audio_file = os.path.join(self.temp_dir, f"{quote_id}.mp3")

        # 如果音频文件不存在，生成它
        if not os.path.exists(audio_file):
            try:
                tts = gTTS(text=quote['text'], lang='zh-cn')
                tts.save(audio_file)
            except Exception as e:
                print(f"生成音频失败: {e}")
                return None

        self.audio_cache[quote['text']] = audio_file
        return audio_file

    def play_current_audio(self):
        """播放当前名言的音频"""
        if 0 <= self.current_quote_index < len(self.filtered_quotes):
            quote = self.filtered_quotes[self.current_quote_index]
            self.play_audio_for_quote(quote)

    def play_audio_for_quote(self, quote):
        """播放指定名言的音频"""
        def play_thread():
            audio_file = self.get_audio_for_quote(quote)
            if audio_file and os.path.exists(audio_file):
                try:
                    pygame.mixer.music.load(audio_file)
                    pygame.mixer.music.play()
                except Exception as e:
                    print(f"播放音频失败: {e}")
                    # 如果播放失败，尝试使用系统声音
                    self.root.bell()

        # 在新线程中播放音频
        threading.Thread(target=play_thread, daemon=True).start()

    def stop_audio(self):
        """停止播放音频"""
        try:
            pygame.mixer.music.stop()
        except:
            pass


def main():
    root = tk.Tk()
    app = HistoricalQuotesApp(root)

    # 设置窗口图标和标题
    root.title("中国历史名言学习系统 - 红色经典传承")

    # 运行主循环
    root.mainloop()


if __name__ == "__main__":
    # 检查必要的库
    try:
        import pygame
        from gtts import gTTS
    except ImportError as e:
        print(f"缺少必要的库: {e}")
        print("请运行: pip install pygame gtts")
        exit(1)

    main()
