Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 June 22

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
def click(self, event):
global i
if self.x > event.x:
if self.y > event.y:
if self.x - event.x <= self.r and self.y - event.y <= self.r:
print(True)
i += 1
print(i)
elif self.y < event.y:
if self.x - event.x <= self.r and event.y - self.y <= self.r:
print(True)
i += 1
print(i)
elif self.x < event.x:
if self.y > event.y:
if event.x - self.x <= self.r and self.y - event.y <= self.r:
print(True)
i += 1
print(i)
elif self.y < event.y:
if event.x - self.x <= self.r and event.y - self.r <= self.r:
print(True)
i += 1
print(i)

Вот обработка клика внутри класса
источник

R

Roman in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
я не видел лекции. но по коду нет класса Ball вот я и отметил такую ошибку
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Alexander
def click(self, event):
global i
if self.x > event.x:
if self.y > event.y:
if self.x - event.x <= self.r and self.y - event.y <= self.r:
print(True)
i += 1
print(i)
elif self.y < event.y:
if self.x - event.x <= self.r and event.y - self.y <= self.r:
print(True)
i += 1
print(i)
elif self.x < event.x:
if self.y > event.y:
if event.x - self.x <= self.r and self.y - event.y <= self.r:
print(True)
i += 1
print(i)
elif self.y < event.y:
if event.x - self.x <= self.r and event.y - self.r <= self.r:
print(True)
i += 1
print(i)

Вот обработка клика внутри класса
pastebin.com
залей туда весь код, поделись ссылкйо
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ясненькоооо....
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну а при чём тут очки. в хендлере кликов нет ни слова про очки. очки у каждого шарика хранятся как атрибут класса? а может случайно его статическим сделали, поэтому это поле общее на все шарики?
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
надо написать глобальную обёрточку, её забиндить на click
обёрточка должна будет для каждого ball in balls выполнять ball.click(event)
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

ИЧ

Игорь Черненко... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Oleg Makarikhin
эм. не думаю что через эмулятор можно будет звонить :\
Будет
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
я в коде не увидел ни одного упоминания каких-либо очков вообще
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
За очки отвечает переменная i (прошу прощения, название надо было дать нормальное)
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ок, щас ещё гляну
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну она же на глобальном уровне. её нужно просто занести в класс шарика, чтобы при вызове click увеличивались очки только у конкретного шарика
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
а очки каждого шарика можно например внутри самого шарика рисовать в центре
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
А если я хочу, чтобы у всех очков очки были общие?
Или я тогда могу внутри класса складывать очки отдельных шариков?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
я думаю можно создать внутри класса статическое поле total_score, а у каждого шарика отдельный score. и тогда в методе клика увеличивать и общие очки, и отдельного шарика
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Спасибо, попробую
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Даже если создать счётчик очков внутри класса, получается, что лкм привязывается, видимо, к последнему из шариков
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
привязка вроде норм. для каждого шарика должна работать
источник

A

Alexander in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Причём если создать шарики вручную, и один обработчик кликов забиндить на root, а второй - на Canvas, то счётчик будет работать
Если на один виджет сразу несколько - то работает только один
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
да, надо логику менять. нужно сделать один обработчик на канвас при клике, и его в класс не нужно помещать. при клике в этот обработчик передаётся собственно объект события и шарик. от объекта события нам нужны координаты для проверки в какой шарик мы попали, то есть мы пробежимся циклом по шарикам и найдём, тот на который кликнул пользователь
источник