Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2019 16:35:29

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

Здравствуйте, решил написать очень простой модуль, который может делать по типу кнопок на базе turtle, но вот не задача, при создании второго объекта с наследованием свойств моего модуля, то первый объект теряет свои свойста.


Например в программе script:

 from engine import Box, Window
btn_1 = Box(0,10)
btn_1.drawBox()
btn_2 = Box(0,-10)
btn_2.drawBox()
def test1():
    print("1")
def test2():
    print("2")
btn_1.onClickBox(test1)
btn_2.onClickBox(test2)
Window.mainloop()

после создание btn_2 с наследованием Box() от engine, то btn_1 теряте свойства выполнение функции при нажатии на него.

Я уверен вам не понятно о чём я говорю, просто запустите код и нажмите на квадраты, работает только 2-ой.

ВОПРОС: как это исправить? Я только начинаю учить ООП в python. (если это можно назвать ООП)
Файл Engine прикрепил. (там шикарный гавнокод)

Отредактировано Gerod (Сен. 29, 2019 16:39:34)

Прикреплённый файлы:
attachment engine.py (1,7 KБ)

Офлайн

#2 Сен. 29, 2019 16:38:00

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

В файле первою строчку заменить на import turtle *

Офлайн

#3 Сен. 29, 2019 17:32:40

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

Думаю проблема во функции turtle - onscreenclick, но как это исправить? как сделать, чтоб проверялись несколько функций? Или это особенности turtle?

Офлайн

#4 Сен. 29, 2019 18:04:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2740
Репутация: +  183  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

В место

 turtle.Screen().onscreenclick(functionEvent)
должно быть
 self.box.onscreenclick(functionEvent)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Сен. 29, 2019 18:12:46

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

Rodegast
В место
так box наследует turtle.Turtle()
а метод onscreensclick от класса turtle.Screen()

Отредактировано Gerod (Сен. 29, 2019 18:22:06)

Офлайн

#6 Сен. 29, 2019 19:36:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2740
Репутация: +  183  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

> а метод onscreensclick от класса turtle.Screen()

Да точно, метод называется onclick, но сути это не меняет.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Сен. 29, 2019 19:36:19)

Офлайн

#7 Сен. 29, 2019 21:54:54

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

Но данный метод проверяет, нажал ли пользовать на череаашку, а мне нужны координаты нажатой мышки

Офлайн

#8 Сен. 29, 2019 22:25:30

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2740
Репутация: +  183  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

> Но данный метод проверяет, нажал ли пользовать на череаашку, а мне нужны координаты нажатой мышки

“a function with two arguments which will be called with the coordinates of the clicked point on the canvas” что означает - функция с двумя аргументами, которая будет вызываться с координатами нажатой точки на холсте
https://docs.python.org/2/library/turtle.html#turtle.onclick



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Сен. 30, 2019 10:25:04

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

К сожалению он не работает, если на черепашку не нажимать. Мне нужно скрыть черепашку (hideturte) и вызвать метод, который будет проверять координаты мыши

Офлайн

#10 Сен. 30, 2019 10:30:59

Gerod
Зарегистрирован: 2018-10-07
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

При наследование двух объектов, второй объект забирает методы первого.

Решил проблему, использовал self.box.screen.onclick(my_func)
Но событие, так же работает только на одну кнопку, если вызвать несколько
Так как при наследовании несколько Box`ов то при вызови каждого, будет один и тот же метод

Пример:

 ...
btn1 = Box(color="green")
btn2 = Box(color="blue")
print(btn1.color)
...
должен написать green но напишет blue (

Отредактировано Gerod (Сен. 30, 2019 10:42:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version