>| ten_btn.grid(row=1, column=5)
>|
>| twenty_btn = Button(self, text="Fifty", width=10)
>| twenty_btn.grid(row=1, column=6, sticky=W)
Не забудьте добавить вызов этого метода в __init__, чтобы все работало.
>self.setUI()
Если вы сделали все верно, то при запуске всего кода вы увидите следующее окно:
Теперь создадим метод рисования на холсте. Для начала создадим переменные класса устанавливающие размер и цвет кисти, в метод __init__ допишите:
>self.brush_size = 10self.brush_color = "black"
Сам метод рисования будет выглядеть следующим образом:
>1 | def draw(self, event):
>2 | self.canv.create_oval(event.x - self.brush_size,
>3 | event.y - self.brush_size,
>4 | event.x + self.brush_size,
>5 | event.y + self.brush_size,
>6 | fill=self.color, outline=self.color)
Рисование осуществляется путем создания кругов на холсте: пользователь зажимает левую кнопку мыши и при движении мышью, по пути следования курсора будут отрисовываться круги. Метод draw принимает аргумент event, на основе которого мы будем формировать овалы. Метод create_oval класса Canvas получает четыре координаты, на основе которых создается квадрат, в который вписывается круг. В качестве этих координат мы передаем позицию курсора, поэтому первая координата по оси икс будет позиция курсора минус размер кисти, вторая координата по оси икс - позиция курсора плюс размер кисти, то же самое для оси игрек. Это может показаться сложным, но скоро вы запустите наше приложение и увидите все своими глазами.
Осталось только привязать к канвасу обработку только что созданного метода. Добавьте следую строку после прикрепления канваса (self.canvas.grid...)
>self.canv.bind("
Уже выглядит неплохо. Добавим возможность изменять цвет кисти, заставим кнопки верхнего ряда работать. Для этого сначала создадим метод изменения цвета кисти:
>| def set_color(self, new_color):
>| self.color = new_color
После этого в каждой кнопке верхнего ряда следует добавить код обработки нажатия этой кнопки по следующему шаблону:
>| red_btn = Button(self, text="Red", width=10, command=lambda: self.set_color("red"))
>| red_btn.grid(row=0, column=1)
Код который мы добавили - command = lambda: self.set_color("red"), привязывает функцию с нужным нам аргументом к кнопке. Мы используем lambda-функцию потому-что, без lambda функция вызовется сразу при создании кнопки, а не только при ее нажатии. (Можете попробовать такую строку command = self.set_color("red") и цвет сразу установится на красный). Добавив этот код с нужными аргументами (а это "green", "blue", "black", "white") ко всем кнопкам получим возможность изменять цвет кисти:
Теперь добавим метод изменения размера кисти:
>| def set_brush_size(self, new_size):
>| self.brush_size = new_size
И модернизируем код каждой кнопки нижнего ряда по следующему шаблону:
>one_btn = Button(self, text="Two", width=10, command=lambda: self.set_brush_size(2))