工作tk画布使用图像绘制应用程序会从画布中删除对象

问题描述

寻求答案和可能的解决方案,以产生意想不到的效果

我正在制作一个绘图应用程序,它使用磁盘上的.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 (将#修改为@)