Python tkinter стирает линии / фигуры с холста, не стирая фоновое изображение - PullRequest
1 голос
/ 21 марта 2019

Я делаю проект на 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

Я также использовал event.y event.y в canvas.delete (event.x, event.y), но это также не работает

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Я написал небольшую программу для вас, чтобы показать, что я исправляю ранее в комментариях.Надеюсь, поможет.

Вам нужен файл 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()
0 голосов
/ 21 марта 2019

Вы не можете стереть, как вы хотите, с холстом.Холст не является инструментом рисования на основе пикселей.Вы можете добавлять и удалять объекты, но вы не можете закрасить или стереть только части объекта.

...