0

0

Python Tkinter Canvas怎么画图_画布组件绘制直线/矩形/圆形与展示图片基础教程

P粉602998670

P粉602998670

发布时间:2026-03-18 01:59:07

|

475人浏览过

|

来源于php中文网

原创

Tkinter Canvas坐标原点在左上角,x向右、y向下增大;create_line(x1,y1,x2,y2)按起点终点顺序传参,create_rectangle(x1,y1,x2,y2)需用左上+右下坐标而非中心+宽高。

python tkinter canvas怎么画图_画布组件绘制直线/矩形/圆形与展示图片基础教程

Canvas 的 create_linecreate_rectangle 坐标怎么算才不偏移?

Tkinter Canvas 的坐标原点在左上角,x 向右增大,y 向下增大——这点和数学坐标系相反,新手常在这里画错位置。比如想画一个从 (50, 50) 到 (150, 150) 的对角线,结果线段出现在窗口顶部靠左,不是预期的中心区域,大概率是误把 y 当成向上为正了。

实操建议:

  • create_line(x1, y1, x2, y2) 四个参数必须按「起点x、起点y、终点x、终点y」顺序传,不能交换 y 位置
  • 矩形 create_rectangle(x1, y1, x2, y2) 是左上角 + 右下角坐标,不是「中心点+宽高」;想居中画 100×60 的矩形,得手动算:x1 = center_x - 50, y1 = center_y - 30, x2 = center_x + 50, y2 = center_y + 30
  • Canvas 默认无背景色,画浅色图形(如白色线)可能看不见,记得用 bg="white" 初始化画布

create_oval 画圆时为什么总变椭圆?

因为 create_oval 实际画的是椭圆,只有当传入的矩形区域(即外接矩形)是正方形时,它才呈现为圆。如果画布被拉伸、窗口缩放、或你给的 x2-x1 ≠ y2-y1,出来的就是椭圆。

常见错误现象:代码写 canvas.create_oval(100, 100, 200, 200) 显示正常,但换成 (100, 100, 200, 199) 就明显压扁——差 1 像素都会暴露问题。

立即学习Python免费学习笔记(深入)”;

实操建议:

  • 确保 x2 - x1 == y2 - y1,否则不是圆,只是个“看起来像”的椭圆
  • 如果依赖用户窗口尺寸动态画圆,先用 canvas.winfo_width()winfo_height() 获取当前大小,再取二者最小值来约束直径
  • 别用 pack(fill="both", expand=True) 后直接硬编码坐标,画布尺寸会变,坐标就失效

在 Canvas 上显示图片为什么 create_image 总报 TclError: image "pyimage1" doesn't exist

这个错误几乎 100% 是因为图片对象被 Python 垃圾回收了。Tkinter 不保存对 PhotoImage 对象的强引用,一旦你没把它绑定到某个长期存活的变量上,函数执行完就销毁,Canvas 找不到图。

可画AI
可画AI

Canva可画魔力工作室,一站式AI智能设计工具平台

下载

使用场景:比如在类方法里写 img = PhotoImage(file="a.png"); canvas.create_image(0, 0, image=img),运行就崩。

实操建议:

  • 必须将 PhotoImage 实例存为类属性(如 self.img = PhotoImage(...))或全局/模块级变量
  • 不要在函数内创建后不保留引用;哪怕只用一次,也要显式挂载,例如:canvas.image = img
  • 支持格式有限:默认只认 GIF 和 PGM/PPM;要显示 PNG/JPEG,得用 PIL.ImageTk.PhotoImage,且同样要防 GC——self.img = ImageTk.PhotoImage(...)

Canvas 绘制后内容不刷新或响应慢,是不是得手动 update

不是必须,但容易忽略触发时机。Canvas 本身是双缓冲的,绘图命令只是进队列,真正渲染取决于主事件循环是否空闲。如果你在循环里密集调用 create_*,又没让出控制权,界面就会卡住、延迟刷新,甚至假死。

性能影响:每帧都删光重画(delete("all"))比复用已有 item 并 coords() 移动慢 3–5 倍,尤其 item 超过 50 个后差异明显。

实操建议:

  • 避免在 while True: 或长循环里直接绘图;改用 after(ms, callback) 分帧调度
  • 移动图形优先用 canvas.coords(item_id, x1, y1, x2, y2)move(item_id, dx, dy),而不是删了重画
  • 真需要强制刷新(比如调试时),用 canvas.update_idletasks()update() 更轻量,不处理事件,只刷绘制

事情说清了就结束。最常漏掉的是图片引用保存和坐标系方向,这两个点卡住的人最多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

108

2023.09.25

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

290

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2023.12.29

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

550

2023.10.23

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

3

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

0

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

2

2026.03.17

Nginx 基础架构:从安装配置到系统化管理
Nginx 基础架构:从安装配置到系统化管理

本专题深入解析Nginx基础架构,涵盖从源码编译与包管理安装,到核心配置文件优化及虚拟主机部署。进一步探讨日志轮转、性能调优、高可用集群构建及自动化运维策略,助力管理员实现从单一服务搭建到企业级系统化管理的全面升级,确保Web服务高效、稳定运行。

1

2026.03.17

mulerun骡子快跑入口地址汇总
mulerun骡子快跑入口地址汇总

本专题整合了mulerun入口地址合集,阅读专题下面的文章了解更多详细内容。

38

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号