Почему Tkinter стирает предыдущие прямоугольники при рисовании?

#python #drawing #tkinter

#python #рисование #tkinter

Вопрос:

Когда я рисую прямоугольник в глобальном масштабе:

 c = Canvas(width=IMAGE_WIDTH, height=IMAGE_HEIGHT, bg='black') 
c.create_rectangle([100, 100, 110, 110], fill='white')
c.pack()
root = Tk() 
  

и следуйте этому, рисуя несколько прямоугольников в цикле

 class gDrawer :
    def __init__(self) :
        self.rect_array = []
        self.x = 0
        self.y = 0

    def incr_counter(self,c,event=None): 
        one_pixel_loc = [self.x, self.y, self.x 5, self.y 5]
        self.rect_array.append(c.create_rectangle(one_pixel_loc, fill='white'))
        self.x  = 1

gd = gDrawer()

for xx in range(100) :
    print xx
    gd.incr_counter(c)

root.mainloop()
  

Один нарисованный прямоугольник остается на холсте, в то время как прямоугольник, нарисованный циклом, перемещается, а не создает цепочку прямоугольников. Я хотел бы нарисовать цепочку прямоугольников, а не движущийся, так что же здесь происходит?

Ответ №1:

По умолчанию для контура a rectangle является black . Это создает впечатление, что другие прямоугольники не рисуются, когда их контур просто перекрывается.

Попробуйте изменить:

 self.rect_array.append(c.create_rectangle(one_pixel_loc, fill='white'))
  

к этому:

 self.rect_array.append(c.create_rectangle(one_pixel_loc, fill='white', outline='white')
  

Не уверен, что это именно то, что вы ищете, надеюсь, это поможет.

Комментарии:

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