【问题标题】:Canvas draws over previous image Tkinter画布在以前的图像 Tkinter 上绘制
【发布时间】:2019-08-07 04:43:39
【问题描述】:

我正在开发一个小型绘画应用程序,当我保存图像时,即使我尝试清除画布,它也会保存之前绘制的图像。你可以看下图来看看问题。

https://i.imgur.com/3DRrq93.png

canvas.delete("all") 清除画布,但仍保留以前的图像。完整的代码写在下面

from tkinter import *
import PIL
from PIL import Image, ImageDraw
#from model import *


def save():
    global image_number
    filename = f'image_{image_number}.jpg'   # image_number increments by 1 at every save
    image1.save(filename)
    image_number += 1
    #play_with_image()



def activate_paint(e):
    global lastx, lasty
    cv.bind('<B1-Motion>', paint)
    lastx, lasty = e.x, e.y


def paint(e):
    global lastx, lasty
    x, y = e.x, e.y
    cv.create_line((lastx, lasty, x, y), width=3)
    #  --- PIL
    draw.line((lastx, lasty, x, y), fill='black', width=3)
    lastx, lasty = x, y

def clear():
    cv.delete("all")
    #for item in cv.find_all():
    #    cv.delete(item)

root = Tk()

lastx, lasty = None, None
image_number = 0

cv = Canvas(root, width=640, height=480, bg='white')
# --- PIL
image1 = PIL.Image.new('RGB', (640, 480), 'white')
draw = ImageDraw.Draw(image1)

cv.bind('<1>', activate_paint)
cv.pack(expand=YES, fill=BOTH)

btn_save = Button(text="save", command=save)
btn_save.pack()

btn_clear = Button(text="clear", command=clear)
btn_clear.pack()

root.mainloop()

如何在不覆盖其他画布的情况下保存新画布?

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    您不是在保存画布,而是在保存图像。你对画布做什么并不重要,因为它从未保存过。

    您永远不会更改或重置图像。您的clear 函数需要清除画布之外的图像。

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 1970-01-01
      • 2015-07-22
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多