Продолжим работать со списками.
На этот раз вернемся к рисованию «шариков» и работе с списком объектов.
Задания выполнять в функции task, вызывать ее нажатием правой кнопки мыши на экране.
Левая — очищает и создает новый список.
from random import randrange as rnd, choice from tkinter import * root = Tk() root.geometry('800x400') canv = Canvas(root, bg = 'white') canv.pack(fill = BOTH, expand = 10) colors = ['red','brown','green','lightgreen','yellow','black','blue'] class ball(): def __init__(self): x = self.x = rnd(100,300) y = self.y = rnd(100,300) r = self.r = rnd(10,30) self.width = rnd(0,5) self.color = choice(colors) self.pen_color = choice(colors) self.id = canv.create_oval(x-r,y-r,x+r,y+r, width = self.width, fill = self.color, outline = self.pen_color ) self.paint() def paint(self): x = self.x y = self.y r = self.r canv.coords(self.id,x-r,y-r,x+r,y+r) canv.itemconfig (self.id, width = self.width, fill = self.color, outline = self.pen_color) def fill_random(event): global balls canv.delete(ALL) balls = [] x = 60 for z in range(12): b = ball() b.y = 200 b.x = x x += 60 b.paint() balls += [b] def task(event): # писать код здесь! Вызывать правой кнопкой мыши pass canv.bind('<Button-1>', fill_random) canv.bind('<Button-3>',task) mainloop()
1. Посчитать количество синих
2. Найти общую площадь зеленых
3. Удалить красные
4. Удалить красные, если их граница синяя
5. Удалить красные, если их граница не синяя
6. Удалить первый красный
7. Удалить каждый второй красный
8. После каждого красного добавить такой же по размеру синий
9. Каждый второй красный сделать серым
10. Удалить синие, если они стоят сразу после красных
11. Удалить зеленые, которые стоят правее синих (не обязательно вплотную). За один синий — один зеленый
12. Все шарики перекрасить в тот цвет, который встречается чаще
13. Все шарики перекрасить в тот цвет, шарики которого занимают бОльшую площадь
14. Удалить самый большой, а шарики слева и справа перекрасить в цвет удаленного большого
15. Удалить самый большой, а размер шариков слева и справа увеличить на 10. Нажамить на эту кнопку несколько раз
16.* Определить, по какому шарику щелкнули мышкой (двумя способами: с помощью координат и с помощью find_overlapping)
2. Найти общую площадь зеленых
3. Удалить красные
4. Удалить красные, если их граница синяя
5. Удалить красные, если их граница не синяя
6. Удалить первый красный
7. Удалить каждый второй красный
8. После каждого красного добавить такой же по размеру синий
9. Каждый второй красный сделать серым
10. Удалить синие, если они стоят сразу после красных
11. Удалить зеленые, которые стоят правее синих (не обязательно вплотную). За один синий — один зеленый
12. Все шарики перекрасить в тот цвет, который встречается чаще
13. Все шарики перекрасить в тот цвет, шарики которого занимают бОльшую площадь
14. Удалить самый большой, а шарики слева и справа перекрасить в цвет удаленного большого
15. Удалить самый большой, а размер шариков слева и справа увеличить на 10. Нажамить на эту кнопку несколько раз
16.* Определить, по какому шарику щелкнули мышкой (двумя способами: с помощью координат и с помощью find_overlapping)