我正在做一个python项目,用户可以在其中以笔记本页面图像作为背景的画布上书写和绘图。 我想要的是用户可以使用鼠标移动来擦除画布上的绘图。 我尝试使用create_line在其中用白色绘画,但这仅在背景为白色的情况下有效,但对于我的背景,它看起来也像在被擦除一样。
def paint(self, event):
self.line_width = self.choose_size_button.get()
paint_color = self.color
if self.old_x and self.old_y:
self.c.create_line(self.old_x, self.old_y, event.x, event.y,
width=self.line_width, fill=paint_color,
capstyle=ROUND, smooth=TRUE,splinesteps=36,tags='rub')
if self.eraser_on :
self.c.delete(id(self.c.create_line))
self.old_x = event.x
self.old_y = event.y
def reset(self, event):
self.old_x, self.old_y = None, None
我还在canvas.delete(event.x,event.y)中使用了event.y event.y,但是效果不佳
答案 0 :(得分:0)
您无法用画布擦除想要的方式。画布不是基于像素的绘画工具。您可以添加和删除对象,但不能仅在对象的一部分上绘制或擦除。
答案 1 :(得分:0)
我为您编写了一个小程序,以显示我之前在评论中提出的内容。希望能帮助到你。
在与该程序相同的文件夹中需要640x480 test.png,并且可以运行此代码。这只是一个简单的绘图应用程序。
画布是要绘制的表面,屏幕对象是背景。
import pygame as pg
from pygame import Color, Surface
WIDTH = 640
HEIGHT = 480
EMPTY = Color(0,0,0,0)
screen = pg.display.set_mode((WIDTH, HEIGHT))
pg.display.set_caption("Drawing app")
bg = pg.image.load("test.png")
clock = pg.time.Clock()
#I create a transparant canvas
canvas = pg.Surface([640,480], pg.SRCALPHA, 32)
def main():
is_running = True
while is_running:
for event in pg.event.get():
if event.type == pg.QUIT:
is_running = False
elif event.type == pg.KEYDOWN:
if event.key == pg.K_ESCAPE:
is_running = False
elif event.type == pg.MOUSEMOTION:
if pg.mouse.get_pressed()[0]:
#if mouse 1 is pressed, you draw a circle on the location of the cursor
location = (pg.mouse.get_pos())
pg.draw.circle(canvas, (0,0,0), location, 20)
elif event.type == pg.MOUSEBUTTONDOWN:
#clear canvas on mouse button 3 press
if event.button == 3:
canvas.fill(EMPTY)
#I blit the background first!
screen.blit(bg,(0,0))
#afterwards I overwrite it with a transparant canvas with the drawing I want
screen.blit(canvas,(0,0))
pg.display.update()
clock.tick(200)
if __name__ == "__main__":
main()