Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域
准备在Python的Tkinter模块中用Canvas绘制如下形式的工艺卡片(图片来自参考文献5,原图来自参考文献4),但是在绘制图形时遇到两个问题,特此记录如下:
jpg图片无法读取
Canvas绘制图片支持bitmap和image两种格式,其中image必须是tkinter模块的BitmapImage类或PhotoImage类的实例变量,而PhotoImage类不支持jpg格式图片。
百度tkinter绘制jpg图片,大部分搜索结果中给出的建议都是使用PIL包中的 Image类和ImageTk类中转一下,具体介绍请见参考文献6,程序代码列出如下:
from PIL import Image, ImageTkimg = Image.open("./images/part1.jpg")
photo = ImageTk.PhotoImage(img)
cv.create_image(startX,startY+51,anchor = tk.NW,image=photo)
如果本机没有安装PIL 包,使用pip install PIL安装包时会提示如下错误,关于该错误的说明请见参考文献2,将安装命令改为pip install Pillow即可正常安装。
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: No matching distribution found for PIL
WARNING: There was an error checking the latest version of pip.
无法将图片绘制到指定区域
图片正常加载后,运行上面的绘图函数绘图,得到如下结果,可以看到图片已经超出的左侧显示区域,占据了部分右侧显示区域。
还是回到Canvas绘图函数定义,绘图函数中仅支持指定绘图的左上角坐标,并没有指定绘图区域的参数,尝试在函数中增加width和height属性并赋值,运行程序时会直接报错。
百度tkinter canvas 绘制图形到指定区域,也没有找到能参考的文章,不过在参考文献3中的示例程序中有调用Image类的resize函数重新设置图片大小的代码。既然没有找到类似C#GDI+和JavaScript绘图函数那样可以指定绘图区域的配置,那死马先当活马医,先将图片尺寸重新设置为工艺卡片中绘图区域的大小,然后再调用Canvas绘图函数绘图,代码及程序效果如下所示。勉强能看,但只是凑合能用,后续还会继续学习Canvas绘图方法,看是否有更好的解决方式。
img = Image.open("./images/part1.jpg").resize((399, 222), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(img)
cv.create_image(startX,startY+51,anchor = tk.NW,image=photo)
参考文献:
[1]http://c.biancheng.net/tkinter/canvas-widget.html
[2]https://blog.csdn.net/username666/article/details/113598726
[3]https://vimsky.com/examples/detail/python-method-ImageTk.PhotoImage.html
[4]https://baike.baidu.com/item/%E5%B7%A5%E8%89%BA%E5%8D%A1/8940434?fr=aladdin
[5]https://blog.csdn.net/gc_2299/article/details/110292808
[6]https://www.cnblogs.com/Mrzyz/p/16146182.html
Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域相关推荐
- Python中Tkinter模块的Canvas控件使用学习(2:绘制简单工程符号)
之前学习HTML5中Canvas绘图方法时,为测试函数功能,使用JavaScript在Canvas中绘制了多种工程图符号,下面两张图是工程图符号的原图.本文参照JavaScript绘图程序,使用p ...
- python中label有什么用_对Python中TKinter模块中的Label组件实例详解
Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...
- python中与label类似的控件是_python中tkinter的使用(控件整理)(一)
1.使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名')修改框体的名字,也可在创建时使用className参数来命名: wind ...
- python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...
本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...
- python中tkinter模块_使用Python中的tkinter模块作图的方法
python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...
- python中与label类似的控件是_Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入...
知识回顾 1.掌握综合应用登录窗体 2.掌握密码设置setEchoMode 本节知识视频教程 以下开始文字讲解: 1.本节案例:快捷定位 1.把label控件上面的快捷键绑定到指定的另一个兄弟控件上 ...
- 10,python中tkinter模块里的鼠标点击事件
实践操作: from tkinter import * #鼠标点击事件的回调函数 def callback(event):print( "clicked at:", event.x ...
- 13,python中tkinter模块里的按键事件
1,按键触发事件通常都与图像处理相结合起来: 下面是一些常见的属性: from tkinter import * win=Tk() win.title('键盘事件') txt=StringVar()# ...
- python中gui有没有电子表格控件_python实现表格控件
""" -- coding:utf-8 -- author:YY设计 datetime: 2019/9/22 9:55 software: PyCharm 学习交流qq群 ...
最新文章
- 对Squid使用的一些总结
- 对sigma pix 的理解
- MyEclipse极速优化
- OutOfMemoryError dump memory
- python短信接口_短信接口DEMO-PYTHON
- 如何修改Chrome默认字体
- 计算机考到贴吧的试题,2014年全国计算机二级VB上机考试试题七
- 互达的集合(线段树)
- PCM设备能在公网使用吗?
- D3D9 effect (hlsl)(转)
- 最长公共子序列(信息学奥赛一本通-T1265)
- 控制項學習四(屬性與事件)
- 将矩阵转为一行_初等变换不会改变矩阵的秩
- html跳动爱心代码,html+css实现跳动爱心❥(^_-)-Go语言中文社区
- 大数据之-Hadoop3.x_Yarn_生产环境核心参数配置案例---大数据之hadoop3.x工作笔记0150
- 进程的系统调用命令转换为INT 0x80中断的过程
- 垂直搜索引擎模块设计
- AX 2012导入Demo数据
- python爬虫毕业论文大纲参考模板_毕业论文提纲参考模板
- WPS Office 2005个人版试用