问题描述
我正在制作一个绘图应用程序,它使用磁盘上的.png图像在tk画布上进行绘制。 读了很多有关垃圾回收和tk canvas的线程,但是仍然没有一个更明智的原因。 您只需要复制一个512 x 512像素宽的图片并将其放在以下脚本所在的位置,然后将您的图片重命名为“ default.png”(不带引号)即可。我也在Mac python 3.7.3上运行此命令,并且对win 10 python 3.7.4具有相同的作用
脚本使用PIL来调整default.png的大小并将其另存为defaultworkbrush.png到相同的工作目录中,然后将defaultworkbrush.png加载到绘制函数中,以将该图像绘制到 画布就像普通的画笔一样。一切都按预期进行。 我还做了一个小功能,可以通过右键单击一次来调整defaultworkbrush.png的大小 当您再次开始绘制时,您会看到画笔已更改,并且绘制功能现在以新的“形状”绘制。到目前为止一切顺利。
但是当您刚开始抓狂并在画布上绘画时,您的杰作似乎就被随机地快速擦除了,大约连续绘制20秒钟之内。 预期的结果将是能够无限期地绘制,并且随着画布上布满更多对象并填充RAM,程序会变慢。不会的。
我该如何解决?我必须更改什么才能在不删除画布的情况下进行绘制?预先感谢。
from tkinter import *
from PIL import Image
a1=Image.open('default.png').convert('RGB')
a2=a1.resize((180,180),Image.NEAREST)
brush='defaultworkbrush.png'
a2.save(brush)
a1.close()
def resizzle(event):
a1=Image.open('defaultworkbrush.png')
a2=a1.resize((300,100),Image.NEAREST)
brush='defaultworkbrush.png'
a2.save(brush)
a1.close()
def motion(event):
x,y=event.x,event.y
return x,y
def paint(event):
Ltk1=PhotoImage(file='defaultworkbrush.png')
Ltk1.image=Ltk1
he,ha=motion(event)
cv.create_image((he,ha),image=Ltk1)
root=Tk()
cv=Canvas(root,width=1280,height=600)
cv.pack(expand=NO,fill=NONE,side=TOP)
cv.bind("<Button-3>",resizzle)
cv.bind("<Motion>",motion)
cv.bind("<B1-Motion>",paint)
global Ltk1
Ltk1=PhotoImage(file='defaultworkbrush.png')
Ltk1.image=Ltk1
root.mainloop()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)