| five_btn = Button(self, text="Seven", width=10)
| five_btn.grid(row=1, column=3)
|
| seven_btn = Button(self, text="Ten", width=10)
| seven_btn.grid(row=1, column=4)
| ten_btn = Button(self, text="Twenty", width=10)
| 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))
Логика работы этих кнопок та же, что и у кнопок изменения цвета кисти. Получаем следующий результат:
На этом практически все, осталось добавить функционал очистки холста. Мы оставили место в верхнем ряду кнопок, его и заполним. Добавьте следующий код в наш метод setUI:
| clear_btn = Button(self, text="Clear all", width=10, command=lambda: self.canv.delete("all"))