在Canvas上放置.png文件的好方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Canvas上放置.png文件的好方法?相关的知识,希望对你有一定的参考价值。

这似乎是一个非常常见的应用程序,但是我无法使其工作:

def Img2Canvas(Img,Canv):#此功能通过拉伸将图像放置在画布上

Canv.update()
H=Canv.winfo_height()
W=Canv.winfo_width()
print([W,H])

temp=ImageTk.PhotoImage(Img.resize((W,H)))
Canv.create_image(1,1,anchor=tk.NW,image=temp)

然后我在主程序中调用了此函数:

cv1=tk.Canvas(root,width=200,height=200,bg='yellow')
Img2Canvas(p1.Img,cv1)

1),这不起作用,画布未更新,我只有黄色背景。仅当我不在函数内部执行temp=ImageTk.PhotoImage(Img.resize((W,H))),而是在函数外部调整图像大小并直接输入temp时,它才起作用...

2)WH似乎是204,而不是200,所以winfo_height()总是再给您4个像素吗?

3)是否有更好的方法在Tkinter中显示图形文件(jpg,png等)?

答案

您需要保留对图像temp的引用,因为它是一个局部变量,在函数结束后将被垃圾回收。建议返回temp并将其分配给变量:

def Img2Canvas(Img, Canv):
    ...
    return temp

...
tkimg = Img2Canvas(p1.Img, cv1)

宽度和高度上的多余像素为highlightthickness的大小,在创建画布时将其设置为0:

cv1 = tk.Canvas(root, width=200, height=200, highlightthickness=0, bg='yellow')

以上是关于在Canvas上放置.png文件的好方法?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 加载drawables而不跳帧

Android使用片段在viewpager中的页面滚动上放置动画

WPF判断两个PNG图片是否碰撞

检测损坏的png文件的有效方法?

检查文件扩展名是不是为图像的好方法

JS工程文件结构