当前位置:首页>python>Python实现在线书法生成器

Python实现在线书法生成器

  • 2026-01-20 18:38:37
Python实现在线书法生成器

请关注本公众号,私信或者联系我要源码或者exe

效果图

在线书法生成器:让你的字也能“C位出道”!

“别再用P图软件给老板写毛笔字了!3 秒钟,选好模板、敲好字、拖一拖,你的大作就能直接打印挂墙——隔壁老王都以为你偷偷练了十年颜柳欧赵!”

别眨眼,今天我们要拆的这段代码,就是一款用 Python 撸出来的在线书法生成器它长了一张“程序员的脸”:Tkinter 的窗口、PIL 的滤镜、requests 的下载、BytesIO 的缓存……但干的全是艺术家的活:

  • 3 张古风宣纸模板——从 CSDN 光速下载,离线也能用;
  • 横竖排版+任意旋转——横着写“天道酬勤”,竖着写“躺平有理”;
  • 字体、字号、字间距、颜色——想多浮夸就多浮夸;
  • 鼠标拖拽实时预览——指哪打哪,妈妈再也不担心我手抖;
  • 一键保存高清 PNG——直接发群,坐等点赞。

下面,咱们把代码按“六大门派”切成六段,逐行解剖,层层递进。系好安全带,发车!


1. 项目总览:从 import 到 __main__ 的“一条龙”

import tkinter as tkfrom tkinter import ttk, colorchooser, messagebox, filedialogfrom tkinter import fontfrom PIL import Image, ImageTk, ImageDraw, ImageFont, ImageGrabimport os, tempfile, traceback, datetime, requestsfrom io import BytesIO
行数
作用
解释
1-2
GUI 全家桶
tkinter
 负责窗口,ttk 让按钮更性感,colorchooser 调出调色板,messagebox 负责卖萌报错
3
字体模块
tkinter.font
 用来统一界面字体,防止中文乱码
4
图像 5 剑客
Image
 打开图片,ImageTk 转给 Tkinter,ImageDraw 写字,ImageFont 调字体,ImageGrab 截图
5-6
系统&网络
os
 找字体路径,tempfile 缓存下载的模板,requests 拉取图片,BytesIO 把网络流变成文件句柄

整个程序只有一个主角类——CalligraphyGenerator。它像一位导演:

  • 在 __init__ 里搭舞台、选演员(变量初始化);
  • 在 create_widgets 里摆机位(左侧控制面板 + 右侧画布);
  • 剩下的方法全是“武术指导”——告诉文字该如何在宣纸上旋转跳跃闭着眼。

2. 舞台搭建:__init__ 的三层“套娃”

classCalligraphyGenerator:def__init__(self, root):# ① 主窗口属性        self.root = root        self.root.title("书法生成器(3模板版)")        self.root.geometry("1200x800")        self.root.minsize(1000700)# ② 核心配置        self.default_font = "SimHei"        self.font_family   = self.default_font        self.font_cache    = {}        # 字体绝对路径缓存# ③ 业务变量        self.current_text  = "天道酬勤"        self.font_size     = 60        self.text_color    = "#000000"        self.text_position = (100100)        ...
层级
变量类别
代表成员
设计目的
① 窗口级
root
 相关
title/geometry/minsize
让观众(用户)第一眼就感受到“大气”
② 全局级
字体缓存
font_cache
避免每次重新找字体文件,提升速度
③ 业务级
文字状态
current_text/font_size/...
每一次操作都是在改这些值,历史记录也存它们

接下来导演喊了声“Action!”——create_widgets() 开始布景。


3. 布景:左侧“操控台” VS 右侧“摄影棚”

defcreate_widgets(self):# 3.1 主框架:左右分栏    main_frame = ttk.Frame(self.root, padding="10")    main_frame.pack(fill=tk.BOTH, expand=True)# 3.2 左侧控制面板    control_frame = ttk.LabelFrame(main_frame, text="书法设置", padding="10")    control_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(010))    control_frame.configure(width=320)    control_frame.pack_propagate(False)   # 宽度写死 320px# 3.3 右侧预览区域    preview_frame = ttk.LabelFrame(main_frame, text="预览(拖动文字调整位置)", padding="10")    preview_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
区域
关键代码
解释
主框架
ttk.Frame
 + pack(fill=BOTH, expand=True)
形成左右分栏的根基
左侧
pack_propagate(False)
写死宽度,防止用户拖拉把按钮挤变形
右侧
LabelFrame
 嵌套 Canvas + 双向滚动条
既能有标题,又能无限滚动看高清大图

3.4 模板选择:三选一,单选逻辑

self.template_var = tk.StringVar()self.template_var.trace("w", self.on_template_selected)  # 监听切换...ttk.Radiobutton(... text="模板1", value="0").pack(side=tk.LEFT, expand=True)
  • trace("w", callback):一旦用户点选,on_template_selected 立即触发下载。
  • 用索引 0/1/2 对应 templates 列表,省得写一堆 if/else。

4. 下载与缓存:模板光速“瞬移”到本地

defdownload_template(self, template_index):# 4.1 如果本地已缓存,直接复用if self.templates[template_index]['local_path'and \       os.path.exists(self.templates[template_index]['local_path']):        self.temp_image_path = self.templates[template_index]['local_path']        self.update_canvas_background()returnTrue# 4.2 否则从 CSDN 拉取    response = requests.get(self.templates[template_index]['url'], timeout=10)if response.status_code == 200:        temp_file = tempfile.NamedTemporaryFile(suffix=".png", delete=False)        temp_path = temp_file.name        temp_file.close()        Image.open(BytesIO(response.content)).save(temp_path)        self.templates[template_index]['local_path'] = temp_path        ...
步骤
关键技巧
目的
缓存检查
os.path.exists
避免重复下载,省流量
临时文件
tempfile.NamedTemporaryFile(delete=False)
程序退出后文件仍在,下次还能用
BytesIO
网络 -> 内存 -> PIL
不落地磁盘,速度更快

5. 文字渲染:把字符串“拆”成一张张字符 PNG

defupdate_preview(self):    self.canvas.delete("text_group")    ...    font_path = self.get_font_path(self.font_family)    pil_font  = ImageFont.truetype(font_path, self.font_size)# 5.1 逐字符渲染for i, char in enumerate(self.current_text):        temp_size = int(self.font_size * 2)        temp_img  = Image.new('RGBA', (temp_size, temp_size), (0,0,0,0))        draw = ImageDraw.Draw(temp_img)        draw.text((0, temp_size//2), char, font=pil_font,                  fill=self.text_color, anchor="lm")# 5.2 旋转        rotated_img = temp_img.rotate(self.rotation_angle, expand=True)        tk_img = ImageTk.PhotoImage(rotated_img)        self.character_images.append(tk_img)# 5.3 计算坐标if self.text_orientation == "horizontal":            x = self.text_position[0] + i*(char_base_dim+self.character_spacing)            y = self.text_position[1]else:            x = self.text_position[0]            y = self.text_position[1] + i*(char_base_dim+self.character_spacing)        self.canvas.create_image(x, y, image=tk_img, tags="text_group", anchor=tk.NW)
子步骤
技术点
解释
5.1 逐字符
一张图只画一个字
方便后续任意字间距、旋转
5.2 旋转
rotate(angle, expand=True)expand=True
 自适应画布大小
5.3 坐标
横排累加 x,竖排累加 y
用 character_spacing 控制松紧

6. 交互三板斧:拖拽、撤销、保存

6.1 拖拽:用“状态机”记录鼠标轨迹

defon_drag_start(self, event):if"text_group"in self.canvas.gettags(self.canvas.find_withtag("current")):        self.dragging = True        self.drag_data = {"x": event.x, "y": event.y, "item""text_group"}defon_drag_motion(self, event):if self.dragging:        dx = event.x - self.drag_data["x"]        dy = event.y - self.drag_data["y"]        self.canvas.move("text_group", dx, dy)        self.drag_data["x"], self.drag_data["y"] = event.x, event.y
  • 用 find_withtag("current") 精准判断鼠标是否在文字上;
  • canvas.move(tag, dx, dy) 让整组字符瞬间位移。

6.2 撤销:时光回溯机

defsave_history(self):    state = {所有业务变量...}    self.operation_history.append(state)    self.history_index = len(self.operation_history) - 1defundo(self):if self.history_index > 0:        self.history_index -= 1        state = self.operation_history[self.history_index]# 恢复所有变量并刷新界面
  • 每一次“有效操作”都 save_history(),内存换用户体验;
  • 列表式堆栈,撤销复杂度 O(1)。

6.3 保存:截图黑科技

defsave_work(self):    x = self.root.winfo_rootx() + self.preview_frame.winfo_x()    y = self.root.winfo_rooty() + self.preview_frame.winfo_y()    w = self.preview_frame.winfo_width()    h = self.preview_frame.winfo_height()    ImageGrab.grab(bbox=(x+10, y+30, x+w-20, y+h-40)).save(filename, 'png')
  • winfo_rootx/y 获取屏幕绝对坐标;
  • 微调 +10 +30 去掉边框;
  • ImageGrab 直接截图,所见即所得。

7. 字体管家:get_font_path 的“海底捞针”

defget_font_path(self, font_name):if font_name in self.font_cache:return self.font_cache[font_name]    font_dirs = ['C:\\Windows\\Fonts','C:\\Program Files\\Windows NT\\Fonts','/usr/share/fonts',        ...    ]for file in self.font_paths[font_name]:for font_dir in font_dirs:            path = os.path.join(font_dir, file)if os.path.exists(path):                self.font_cache[font_name] = pathreturn pathreturnNone
  • 跨平台路径列表,Windows / Linux / macOS 一把梭;
  • 命中即缓存,避免每次都磁盘 IO。

8. 总结:知识点与目标全景图

维度
本项目实战要点
可延伸学习
GUI 编程
Tkinter 布局、事件绑定、画布滚动
PyQt、Kivy、DearPyGui
图像处理
PIL 字体渲染、旋转、透明度、缩放
OpenCV、Skia、Cairo
网络 IO
requests 下载、BytesIO、临时文件
aiohttp、asyncio
软件工程
状态管理(undo/redo)、缓存、异常捕获
设计模式、单元测试
用户体验
实时预览、拖拽交互、一键保存
UX 设计、动画效果

最终目标

  • 让用户在零安装情况下,30 秒内生成一张“看起来练了十年”的书法作品;
  • 让开发者通过 300 行不到的“小而美”代码,学会Python GUI 全流程开发布局 → 事件 → 渲染 → 保存 → 异常兜底。

把代码丢进 PyInstaller,再打包一个 exe,你就是春节写对联最靓的仔!

点击【关注+收藏】获取最新的实战代码案例

Python 20天的学习计划

Python的 7 天 学习计划

Python实现创意画板代码

用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现

Python实现表情包制作器

Python实现中国象棋小游戏

Python实现印章生成器

Python模拟实现金山打字通

Python超实用 Markdown 转富文本神器 —— 代码全解析

Python实现贪吃蛇小游戏源码解析

Python实现二维码生成

Python实现视频播放器

Python实现印章生成器

Python实现在线印章制作

Python+Ai实现一个简单的智能语音小助手

Python实现简单记事本

Python实现Markdown转HTML工具代码

Python实现创意画板代码

Python实现简易图画工具代码

Python实现视频播放器

Python实现简单记事本

Python 实现连连看游戏代码解析

Python实现简单电脑进程管理器

Python一个超实用的工具-词频统计工具

Python简易爬虫天气工具

Python定时任务提醒工具

Python《猜数字游戏代码解析》

Python《简易计算器代码解析》

Python+Ai在线文档生成小助手

Python 《密码生成器代码解析》

Python|+Ai实现一个简单的智能语音小助手

Python实现简易图画工具代码

Python实现Markdown转Html

Python实现视频播放器

Python 实现连连看游戏代码解析

Python实现火山AI调用生成故事

Python实现豆包Ai调用生成故事

Python实现简单记事本

Python实现简单电脑进程管理器

实战1

  1. Python:生成二维码生成器

  2. Python-pgame实现迷宫

  3. Python-实现天气时钟小助手

  4. Python-QrCode实现各种二维码

  5. Python-pyglet实现鸿蒙时钟

  6. Python-pickle解析获取微信好友信息

  7. Python-wxPy初版实现微信消息轰炸

  8. Python实现八卦星空时钟

  9. Python实现国庆红旗头像效果

  10. Python-PIL实现图片上指定位置添加图标识

实战2

  1. Python-wxPy初版实现微信消息轰炸

  2. Python-PIL库Image类解析

  3. Python-tlinter实现简单学生管理系统

  4. Python-itChat实现微信消息推发

  5. Python实现Pdf转Word

  6. Python-实现自动生成对联小助手

  7. Py2Exe另外一种方式的打包

  8. Python-tts生成语音转换小助手

  9. python-win32等实现exe自动添加到电脑自启动选项

  10. python实现桌面录制视频

  11. PySimpleGUI-checkboxPython实现图片截取成九宫格

  12. python打包成exe文件

  13. Python-faker生成虚拟数据

  14. python实现播放器Python-FastApi简单实现

  15. python爬取豆瓣电影影评

  16. Python 爬取公众号文章集合

实战3

  1. python实现简易飞花令

  2. python-获取图猜成语的图片

  3. python-menu菜单实现

  4. Python-pySimpleGUI实现界面

  5. Python-彩色图片转换白描

  6. Python-moviepy-实现音视频播放器

  7. Python操作SQLite数据库

  8. Python-PySimpleGUI实现菜单

  9. python-Tkinter实现个性签名

  10. Python-WordCloud云词图

  11. Python-customTkinter的使用

  12. Python-tkinter(下)

  13. Python-tkinter(中)

  14. python-tkinter(1)

  15. Python实现视频小助手

实战4

  1. Python实现视频小助手

  2. Python-flask-1:搭建主页面

  3. Python之tttkbootstrap界面

  4. python-PyQt5实现图片显示和简易阅读器

  5. 在Pycharm上配置Qt Designer 及 Pyuic

  6. Python之PIL实现一寸二寸等图片的裁剪和生成

  7. Python爬取金山词典查询结果

  8. python实现生成个性二维码

  9. AI人机对战版五子棋游戏(AI+pygame实现)

  10. python实现垃圾分类查询器

  11. python-实现菜单menu

  12. Python 领域运用之:自动化测试

  13. Python 领域运用:Web 开发

  14. Python 领域运用:自动化运维

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 09:19:27 HTTP/2.0 GET : https://f.mffb.com.cn/a/464679.html
  2. 运行时间 : 0.124123s [ 吞吐率:8.06req/s ] 内存消耗:4,589.18kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b11a8ac422f76c9ddbb5da23898be776
  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.001044s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001594s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000696s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000694s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001362s ]
  6. SELECT * FROM `set` [ RunTime:0.000613s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001456s ]
  8. SELECT * FROM `article` WHERE `id` = 464679 LIMIT 1 [ RunTime:0.002128s ]
  9. UPDATE `article` SET `lasttime` = 1770513567 WHERE `id` = 464679 [ RunTime:0.004376s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.002207s ]
  11. SELECT * FROM `article` WHERE `id` < 464679 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001219s ]
  12. SELECT * FROM `article` WHERE `id` > 464679 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001139s ]
  13. SELECT * FROM `article` WHERE `id` < 464679 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001592s ]
  14. SELECT * FROM `article` WHERE `id` < 464679 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003775s ]
  15. SELECT * FROM `article` WHERE `id` < 464679 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013245s ]
0.127792s