Найти - Пользователи
Полная версия: При наследование двух объектов, второй объект забирает методы первого.
Начало » Python для экспертов » При наследование двух объектов, второй объект забирает методы первого.
1
Gerod
Здравствуйте, решил написать очень простой модуль, который может делать по типу кнопок на базе 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
В файле первою строчку заменить на import turtle *
Gerod
Думаю проблема во функции turtle - onscreenclick, но как это исправить? как сделать, чтоб проверялись несколько функций? Или это особенности turtle?
Rodegast
В место
 turtle.Screen().onscreenclick(functionEvent)
должно быть
 self.box.onscreenclick(functionEvent)
Gerod
Rodegast
В место
так box наследует turtle.Turtle()
а метод onscreensclick от класса turtle.Screen()
Rodegast
> а метод onscreensclick от класса turtle.Screen()

Да точно, метод называется onclick, но сути это не меняет.
Gerod
Но данный метод проверяет, нажал ли пользовать на череаашку, а мне нужны координаты нажатой мышки
Rodegast
> Но данный метод проверяет, нажал ли пользовать на череаашку, а мне нужны координаты нажатой мышки

“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
Gerod
К сожалению он не работает, если на черепашку не нажимать. Мне нужно скрыть черепашку (hideturte) и вызвать метод, который будет проверять координаты мыши
Gerod
Решил проблему, использовал self.box.screen.onclick(my_func)
Но событие, так же работает только на одну кнопку, если вызвать несколько
Так как при наследовании несколько Box`ов то при вызови каждого, будет один и тот же метод

Пример:
 ...
btn1 = Box(color="green")
btn2 = Box(color="blue")
print(btn1.color)
...
должен написать green но напишет blue (
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB