微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决工作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 举报,一经查实,本站将立刻删除。