当前位置:首页>python>Python TTS 元音单词跟读英文书写练习

Python TTS 元音单词跟读英文书写练习

  • 2026-08-18 23:10:27
Python TTS 元音单词跟读英文书写练习

元音单词跟读英文书写练习 - Python TTS GUI 版本

通过网盘分享的文件:元音单词跟读练习.exe

链接: https://pan.baidu.com/s/1qK3iFiRAa-if8sIUFZdQWQ?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦

项目概述

本项目是将原有 H5 网页版「元音单词跟读英文书写练习」完整移植为 Python 桌面 GUI 应用。原始 H5 版本基于浏览器的 Web Speech API 实现语音朗读,通过 Canvas 实现手写与自动书写动画,并支持主题切换与响应式布局。Python 版本使用 tkinter 作为 GUI 框架,pyttsx3 作为离线 TTS 语音引擎,完整复刻了原版的核心功能,同时针对桌面应用场景进行了适配优化。

功能特性

1. TTS 语音朗读

应用集成了 pyttsx3 离线语音合成引擎,无需联网即可朗读英文单词。引擎启动时会自动检索系统已安装的语音包,优先选择英文语音(en-US)。朗读操作在子线程中执行,确保 GUI 界面不会因语音合成而卡顿。用户点击任意单词卡片上的「读音」按钮,即可听到标准英文发音,语速设置为 140(略慢于正常语速),方便学习者跟读模仿。

2. 手写练习画布

点击「书写」按钮会弹出手写练习窗口,窗口顶部显示目标单词作为参照。画布区域支持鼠标拖拽书写,笔触平滑,支持粗笔(6px)和细笔(3px)两种线宽切换。画布背景为白色,书写笔迹为黑色,视觉清晰。提供「清空画布」按钮可一键重置,方便反复练习。

3. 自动书写动画

手写练习窗口内置「自动书写」功能,点击后系统会逐字母播放书写动画。每个字母使用不同的彩虹渐变色(红、橙、绿、蓝、紫、青),通过渐显效果模拟书写过程。动画在子线程中运行,不阻塞用户交互。用户可以在动画播放过程中随时点击画布开始手写,动画会自动停止。

4. 元音分组显示

所有单词按五组短元音分类展示:

  • /æ/ (a): cat, bag, map, fat
  • /e/ (e): pen, bed, egg, leg
  • /ɪ/ (i): big, pig, fish, milk
  • /ɒ/ (o): dog, box, hot, fox
  • /ʌ/ (u): cup, bus, sun, duck

每个单词卡片包含:英文单词(元音字母标红高亮)、国际音标、中文释义,以及「读音」和「书写」两个操作按钮。元音字母的红色高亮帮助学习者快速识别发音规律。

5. 主题切换

提供三套主题配色方案,与 H5 原版完全一致:

  • 浅色主题:白色背景 + 深色文字,清爽明亮
  • 护眼绿主题:淡绿色背景,长时间使用不伤眼
  • 深色主题:深蓝黑背景 + 亮色文字,适合暗光环境

切换主题后所有组件(背景、卡片、按钮、文字)颜色实时更新。

6. 自适应列数

支持每行显示 2、3、4 个单词卡片,通过下拉框切换。列数更改后界面即时重新布局,适配不同屏幕尺寸和用户偏好。内容区域支持鼠标滚轮滚动,单词较多时也能流畅浏览。

技术架构

依赖项

版本
用途
Python
>= 3.7
运行环境
tkinter
内置
GUI 框架
pyttsx3
>= 2.90
离线 TTS 语音合成
threading
内置
异步语音与动画

核心类设计

  • TTSEngine:语音引擎封装类,负责初始化 pyttsx3、设置语音参数、在子线程中执行朗读
  • WritingDialog:手写练习弹窗(继承 tk.Toplevel),包含画布绑定、自动书写动画逻辑
  • VowelTTSApp:主应用类,管理整体界面布局、主题切换、卡片渲染与事件绑定

与 H5 版本的对应关系

H5 功能
Python 实现
Web Speech API
pyttsx3 离线引擎
HTML Canvas 手写
tkinter Canvas + 鼠标事件
CSS 主题变量
Python 字典 + 动态配置
CSS Grid 布局
tkinter grid 布局管理器
JavaScript 动画
threading + canvas.create_text
浏览器弹窗
tk.Toplevel 模态窗口
window.print()
桌面应用暂不支持(可扩展)

安装与运行

安装依赖

pip install pyttsx3

注意:Windows 系统通常自带 SAPI5 语音引擎,可直接使用。Linux 需额外安装 espeak (sudo apt install espeak),macOS 使用内置 NSSpeechSynthesizer。

启动应用

python vowel_tts_gui.py

使用说明

  1. 启动后默认显示浅色主题,每行 4 个单词卡片
  2. 点击任意卡片的「读音」按钮,系统朗读该单词的英文发音
  3. 点击「书写」按钮弹出手写练习窗口,参照顶部目标单词在画布上手写
  4. 手写窗口内可切换粗/细笔、清空画布,或点击「自动书写」观看字母书写动画
  5. 右上角可切换主题配色和每行显示数量

扩展方向

  • 接入在线 TTS(如 Google TTS、Azure Cognitive Services)获取更自然的发音
  • 添加手写识别功能,对比用户书写与标准字形
  • 支持自定义单词列表导入(JSON/CSV)
  • 增加发音评分与学习进度记录
  • 导出 PDF 单词表用于打印

项目文件

vowel_tts_gui.py   # 主程序(完整功能实现)README.md          # 本文档
"""元音单词跟读英文书写练习 - Python TTS GUI版本功能:TTS语音朗读、手写画布、自动书写动画、主题切换依赖:pip install pyttsx3"""import tkinter as tkfrom tkinter import ttk, Canvasimport pyttsx3import threadingimport time============ 单词数据 ============WORD_DATA = {"短元音 /æ/ 字母a": [{"word""cat""phonetic""/kæt/""cn""猫""vowel_pos": [1]},{"word""bag""phonetic""/bæɡ/""cn""包""vowel_pos": [1]},{"word""map""phonetic""/mæp/""cn""地图""vowel_pos": [1]},{"word""fat""phonetic""/fæt/""cn""胖的""vowel_pos": [1]},],"短元音 /e/ 字母e": [{"word""pen""phonetic""/pen/""cn""钢笔""vowel_pos": [1]},{"word""bed""phonetic""/bed/""cn""床""vowel_pos": [1]},{"word""egg""phonetic""/eɡ/""cn""鸡蛋""vowel_pos": [0]},{"word""leg""phonetic""/leɡ/""cn""腿""vowel_pos": [1]},],"短元音 /ɪ/ 字母i": [{"word""big""phonetic""/bɪɡ/""cn""大的""vowel_pos": [1]},{"word""pig""phonetic""/pɪɡ/""cn""猪""vowel_pos": [1]},{"word""fish""phonetic""/fɪʃ/""cn""鱼""vowel_pos": [1]},{"word""milk""phonetic""/mɪlk/""cn""牛奶""vowel_pos": [1]},],"短元音 /ɒ/ 字母o": [{"word""dog""phonetic""/dɒɡ/""cn""狗""vowel_pos": [1]},{"word""box""phonetic""/bɒks/""cn""盒子""vowel_pos": [1]},{"word""hot""phonetic""/hɒt/""cn""热的""vowel_pos": [1]},{"word""fox""phonetic""/fɒks/""cn""狐狸""vowel_pos": [1]},],"短元音 /ʌ/ 字母u": [{"word""cup""phonetic""/kʌp/""cn""杯子""vowel_pos": [1]},{"word""bus""phonetic""/bʌs/""cn""公交车""vowel_pos": [1]},{"word""sun""phonetic""/sʌn/""cn""太阳""vowel_pos": [1]},{"word""duck""phonetic""/dʌk/""cn""鸭子""vowel_pos": [1]},],}============ 主题配色 ============THEMES = {"浅色": {"bg""#f8fafc""fg""#1e293b","card_bg""#ffffff""card_border""#e2e8f0","btn_read""#2563eb""btn_write""#10b981","vowel_color""#e53935",},"护眼绿": {"bg""#f0fdf4""fg""#065f46","card_bg""#ecfdf5""card_border""#a7f3d0","btn_read""#059669""btn_write""#4f46e5","vowel_color""#e53935",},"深色": {"bg""#0f172a""fg""#f1f5f9","card_bg""#1e293b""card_border""#475569","btn_read""#3b82f6""btn_write""#22c55e","vowel_color""#ff6b6b",},}自动书写动画颜色AUTO_DRAW_COLORS = ['#e74c3c''#f39c12''#27ae60''#2980b9''#8e44ad''#1abc9c']class TTSEngine:"""TTS语音引擎封装,支持异步朗读"""def __init__(self):    self._lock = threading.Lock()    self._speaking = Falsedef speak(self, text):    """每次朗读创建新引擎实例,避免 runAndWait 死锁"""    if self._speaking:        return    def _run():        self._speaking = True        try:            engine = pyttsx3.init()            engine.setProperty('rate'140)            engine.setProperty('volume'1.0)            # 尝试设置英文语音            voices = engine.getProperty('voices')            for voice in voices:                if 'english' in voice.name.lower() or 'en' in voice.languages:                    engine.setProperty('voice', voice.id)                    break            engine.say(text)            engine.runAndWait()            engine.stop()        except Exception:            pass        finally:            self._speaking = False    threading.Thread(target=_run, daemon=True).start()class WritingDialog(tk.Toplevel):"""手写练习弹窗 - 含画布与自动书写动画"""def __init__(self, parent, word, theme):    super().__init__(parent)    self.title("英文单词手写练习")    self.word = word    self.theme = theme    self.geometry("520x480")    self.resizable(FalseFalse)    self.configure(bg=theme["bg"])    self.transient(parent)    self.grab_set()    self.line_width = 4    self.drawing = False    self.last_x = 0    self.last_y = 0    self.auto_drawing = False    self._build_ui()def _build_ui(self):    t = self.theme    # 标题    tk.Label(self, text="英文单词手写练习", font=("Arial"16"bold"),             bg=t["bg"], fg=t["fg"]).pack(pady=(124))    # 目标单词    tk.Label(self, text=self.word, font=("Arial"32"bold"),             bg=t["bg"], fg=t["btn_read"]).pack(pady=(08))    # 画布    self.canvas = Canvas(self, width=480, height=260, bg="white",                         bd=2, relief="groove", cursor="pencil")    self.canvas.pack(padx=16, pady=4)    self.canvas.bind("<Button-1>"self._start_draw)    self.canvas.bind("<B1-Motion>"self._draw_move)    self.canvas.bind("<ButtonRelease-1>"self._stop_draw)    # 工具栏    toolbar = tk.Frame(self, bg=t["bg"])    toolbar.pack(pady=8)    btn_style = {"font": ("Arial"11), "width"10"cursor""hand2""bd"0}    tk.Button(toolbar, text="自动书写", bg="#c0392b", fg="white",              command=self._auto_draw, **btn_style).pack(side="left", padx=4)    tk.Button(toolbar, text="清空画布", bg="#333333", fg="white",              command=self._clear, **btn_style).pack(side="left", padx=4)    tk.Button(toolbar, text="细笔", bg="#333333", fg="white",              command=lambdaself._set_width(3), **btn_style).pack(side="left", padx=4)    tk.Button(toolbar, text="粗笔", bg="#333333", fg="white",              command=lambdaself._set_width(6), **btn_style).pack(side="left", padx=4)    # 关闭按钮    tk.Button(self, text="关闭", bg="#666666", fg="white",              font=("Arial"12), width=20, command=self.destroy,              cursor="hand2", bd=0).pack(pady=(812))def _start_draw(self, event):    self.drawing = True    self.auto_drawing = False    self.last_x = event.x    self.last_y = event.ydef _draw_move(self, event):    if not self.drawing:        return    self.canvas.create_line(self.last_x, self.last_y, event.x, event.y,                            width=self.line_width, fill="black",                            capstyle="round", joinstyle="round")    self.last_x = event.x    self.last_y = event.ydef _stop_draw(self, event):    self.drawing = Falsedef _clear(self):    self.canvas.delete("all")    self.auto_drawing = Falsedef _set_width(self, w):    self.line_width = wdef _auto_draw(self):    """自动书写动画 - 逐字母渐显"""    if self.auto_drawing:        return    self.auto_drawing = True    self._clear()    self.auto_drawing = True  # _clear会重置,需重新设定    def _animate():        start_x = 40        base_y = 150        gap = 70        font_size = 48        for i, char in enumerate(self.word):            if not self.auto_drawing:                break            color = AUTO_DRAW_COLORS[i % len(AUTO_DRAW_COLORS)]            # 渐显动画:逐步增加字母透明度(用不同灰度模拟)            for step in range(111):                if not self.auto_drawing:                    break                tag = f"letter_{i}"                self.canvas.delete(tag)                # 模拟渐显:字体从浅到深                alpha = int(255 * step / 10)                self.canvas.create_text(                    start_x + i * gap, base_y,                    text=char, font=("Arial", font_size, "bold"),                    fill=color, tags=tag                )                time.sleep(0.03)            time.sleep(0.2)        self.auto_drawing = False    threading.Thread(target=_animate, daemon=True).start()class VowelTTSApp:"""主应用程序"""def __init__(self):    self.root = tk.Tk()    self.root.title("元音单词跟读英文书写练习")    self.root.geometry("900x700")    self.root.minsize(700500)    self.current_theme = "浅色"    self.columns = 4    self.tts = TTSEngine()    self._build_header()    self._build_content()    self._apply_theme()def _build_header(self):    """顶部标题栏与设置"""    self.header = tk.Frame(self.root)    self.header.pack(fill="x", padx=16, pady=(128))    tk.Label(self.header, text="元音单词跟读英文书写",             font=("Arial"20"bold")).pack(side="left")    settings = tk.Frame(self.header)    settings.pack(side="right")    # 主题切换    tk.Label(settings, text="主题:", font=("Arial"11)).pack(side="left")    self.theme_var = tk.StringVar(value="浅色")    theme_combo = ttk.Combobox(settings, textvariable=self.theme_var,                               values=list(THEMES.keys()), width=8, state="readonly")    theme_combo.pack(side="left", padx=(012))    theme_combo.bind("<<ComboboxSelected>>"self._on_theme_change)    # 列数切换    tk.Label(settings, text="每行:", font=("Arial"11)).pack(side="left")    self.col_var = tk.StringVar(value="4")    col_combo = ttk.Combobox(settings, textvariable=self.col_var,                             values=["2""3""4"], width=4, state="readonly")    col_combo.pack(side="left")    col_combo.bind("<<ComboboxSelected>>"self._on_col_change)def _build_content(self):    """构建可滚动的单词卡片区域"""    # 滚动容器    container = tk.Frame(self.root)    container.pack(fill="both", expand=True, padx=8, pady=4)    self.scroll_canvas = Canvas(container, highlightthickness=0)    scrollbar = ttk.Scrollbar(container, orient="vertical",                              command=self.scroll_canvas.yview)    self.scroll_frame = tk.Frame(self.scroll_canvas)    self.scroll_frame.bind("<Configure>",                           lambda e: self.scroll_canvas.configure(                               scrollregion=self.scroll_canvas.bbox("all")))    self.scroll_canvas.create_window((00), window=self.scroll_frame, anchor="nw")    self.scroll_canvas.configure(yscrollcommand=scrollbar.set)    self.scroll_canvas.pack(side="left", fill="both", expand=True)    scrollbar.pack(side="right", fill="y")    # 鼠标滚轮绑定    self.scroll_canvas.bind_all("<MouseWheel>",                                lambda e: self.scroll_canvas.yview_scroll(                                    int(-1 * (e.delta / 120)), "units"))    self._render_cards()def _render_cards(self):    """渲染所有单词卡片"""    for widget in self.scroll_frame.winfo_children():        widget.destroy()    t = THEMES[self.current_theme]    row_idx = 0    for group_name, words in WORD_DATA.items():        # 元音组标题        title_label = tk.Label(self.scroll_frame, text=group_name,                               font=("Arial"14"bold"),                               bg=t["bg"], fg=t["fg"], anchor="w")        title_label.grid(row=row_idx, column=0, columnspan=self.columns,                         sticky="w", padx=8, pady=(166))        row_idx += 1        # 单词卡片        for i, item in enumerate(words):            col = i % self.columns            card = self._create_card(self.scroll_frame, item, t)            card.grid(row=row_idx + i // self.columns, column=col,                      padx=6, pady=6, sticky="nsew")        # 设置列权重        for c in range(self.columns):            self.scroll_frame.columnconfigure(c, weight=1)        row_idx += (len(words) + self.columns - 1) // self.columns + 1def _create_card(self, parent, item, theme):    """创建单个单词卡片"""    t = theme    card = tk.Frame(parent, bg=t["card_bg"], bd=1, relief="solid",                    highlightbackground=t["card_border"], highlightthickness=1,                    padx=10, pady=8)    # 英文单词(元音字母标红)    word_frame = tk.Frame(card, bg=t["card_bg"])    word_frame.pack(anchor="w")    for idx, ch in enumerate(item["word"]):        color = t["vowel_color"if idx in item["vowel_pos"else t["fg"]        tk.Label(word_frame, text=ch, font=("Arial"16"bold"),                 bg=t["card_bg"], fg=color).pack(side="left")    # 音标    tk.Label(card, text=item["phonetic"], font=("Arial"11),             bg=t["card_bg"], fg="#888888").pack(anchor="w")    # 中文释义    tk.Label(card, text=item["cn"], font=("Arial"12),             bg=t["card_bg"], fg=t["fg"]).pack(anchor="w", pady=(26))    # 按钮组    btn_frame = tk.Frame(card, bg=t["card_bg"])    btn_frame.pack(fill="x")    tk.Button(btn_frame, text="读音", bg=t["btn_read"], fg="white",              font=("Arial"10"bold"), bd=0, cursor="hand2",              command=lambda w=item["word"]: self.tts.speak(w)              ).pack(side="left", expand=True, fill="x", padx=(04))    tk.Button(btn_frame, text="书写", bg=t["btn_write"], fg="white",              font=("Arial"10"bold"), bd=0, cursor="hand2",              command=lambda w=item["word"]: self._open_writing(w)              ).pack(side="left", expand=True, fill="x", padx=(40))    return carddef _open_writing(self, word):    """打开手写练习弹窗"""    WritingDialog(self.root, word, THEMES[self.current_theme])def _apply_theme(self):    """应用当前主题"""    t = THEMES[self.current_theme]    self.root.configure(bg=t["bg"])    self.header.configure(bg=t["bg"])    for widget in self.header.winfo_children():        try:            widget.configure(bg=t["bg"], fg=t["fg"])        except tk.TclError:            pass    self.scroll_canvas.configure(bg=t["bg"])    self.scroll_frame.configure(bg=t["bg"])    self._render_cards()def _on_theme_change(self, event=None):    self.current_theme = self.theme_var.get()    self._apply_theme()def _on_col_change(self, event=None):    self.columns = int(self.col_var.get())    self._render_cards()def run(self):    self.root.mainloop()if name == "main":app = VowelTTSApp()app.run()

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 02:14:50 HTTP/2.0 GET : https://f.mffb.com.cn/a/504254.html
  2. 运行时间 : 0.245700s [ 吞吐率:4.07req/s ] 内存消耗:4,511.83kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=072525cda0088a02c7fa2d66b618829f
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001147s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001644s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000694s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000638s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001310s ]
  6. SELECT * FROM `set` [ RunTime:0.000618s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001424s ]
  8. SELECT * FROM `article` WHERE `id` = 504254 LIMIT 1 [ RunTime:0.017349s ]
  9. UPDATE `article` SET `lasttime` = 1787336090 WHERE `id` = 504254 [ RunTime:0.031308s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000709s ]
  11. SELECT * FROM `article` WHERE `id` < 504254 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001132s ]
  12. SELECT * FROM `article` WHERE `id` > 504254 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000965s ]
  13. SELECT * FROM `article` WHERE `id` < 504254 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009375s ]
  14. SELECT * FROM `article` WHERE `id` < 504254 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005492s ]
  15. SELECT * FROM `article` WHERE `id` < 504254 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007937s ]
0.249340s