准备在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图片到指定区域相关推荐

  1. Python中Tkinter模块的Canvas控件使用学习(2:绘制简单工程符号)

      之前学习HTML5中Canvas绘图方法时,为测试函数功能,使用JavaScript在Canvas中绘制了多种工程图符号,下面两张图是工程图符号的原图.本文参照JavaScript绘图程序,使用p ...

  2. python中label有什么用_对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...

  3. python中与label类似的控件是_python中tkinter的使用(控件整理)(一)

    1.使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名')修改框体的名字,也可在创建时使用className参数来命名: wind ...

  4. python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...

    本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...

  5. python中tkinter模块_使用Python中的tkinter模块作图的方法

    python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...

  6. python中与label类似的控件是_Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入...

    知识回顾 1.掌握综合应用登录窗体 2.掌握密码设置setEchoMode 本节知识视频教程 以下开始文字讲解: 1.本节案例:快捷定位 1.把label控件上面的快捷键绑定到指定的另一个兄弟控件上 ...

  7. 10,python中tkinter模块里的鼠标点击事件

    实践操作: from tkinter import * #鼠标点击事件的回调函数 def callback(event):print( "clicked at:", event.x ...

  8. 13,python中tkinter模块里的按键事件

    1,按键触发事件通常都与图像处理相结合起来: 下面是一些常见的属性: from tkinter import * win=Tk() win.title('键盘事件') txt=StringVar()# ...

  9. python中gui有没有电子表格控件_python实现表格控件

    """ -- coding:utf-8 -- author:YY设计 datetime: 2019/9/22 9:55 software: PyCharm 学习交流qq群 ...

最新文章

  1. 对Squid使用的一些总结
  2. 对sigma pix 的理解
  3. MyEclipse极速优化
  4. OutOfMemoryError dump memory
  5. python短信接口_短信接口DEMO-PYTHON
  6. 如何修改Chrome默认字体
  7. 计算机考到贴吧的试题,2014年全国计算机二级VB上机考试试题七
  8. 互达的集合(线段树)
  9. PCM设备能在公网使用吗?
  10. D3D9 effect (hlsl)(转)
  11. 最长公共子序列(信息学奥赛一本通-T1265)
  12. 控制項學習四(屬性與事件)
  13. 将矩阵转为一行_初等变换不会改变矩阵的秩
  14. html跳动爱心代码,html+css实现跳动爱心❥(^_-)-Go语言中文社区
  15. 大数据之-Hadoop3.x_Yarn_生产环境核心参数配置案例---大数据之hadoop3.x工作笔记0150
  16. 进程的系统调用命令转换为INT 0x80中断的过程
  17. 垂直搜索引擎模块设计
  18. AX 2012导入Demo数据
  19. python爬虫毕业论文大纲参考模板_毕业论文提纲参考模板
  20. WPS Office 2005个人版试用

热门文章

  1. Android自定义View之图形图像(模仿360的刷新球自定义一个SeekBar)
  2. 廖金菊——湖南高尔夫旅游职业学院文化社诗人
  3. 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
  4. 有关数据库的一级、二级、三级封锁协议
  5. Win10自带邮件系统绑定腾讯企业邮箱
  6. 百度开源AI硬件开发平台BIE-AI-Box和BIE-AI-Board
  7. 32位和64位系统支持的最大内存
  8. keil5编译器退出调试时卡死
  9. MU-MIMO技术让网络变神速的方法
  10. 开关电源布局布线总结