Можно ли связать on_dropfile
в нескольких объектах? Или это всегда одна привязка?kivy on_dropfile несколько привязок
Я decalred класс
class dropFile(Label):
def __init__(self, **kwargs):
super(dropFile, self).__init__(**kwargs)
Window.bind(mouse_pos=lambda w, p: setattr(helper, 'mpos', p))
Window.bind(on_dropfile=self.on_dropfile)
def on_dropfile(self, *args):
print ("ding")
if (self.center_x - self.width/2 < helper.mpos[0] < self.center_x + self.width/2 and
self.center_x - self.height/2 < helper.mpos[1] < self.center_y + self.height/2):
print('dong')
self.text = str(args[1])
и в кв я просто использовать его как
dropFile:
text: "Please drop file1"
dropFile:
text: "Please drop file2"
Но работает только на первом поле (он видит только файлы, которые отбрасываются на " Please drop file1 ", в другом случае он получает падение, но не может признать, что он находится в границах второго поля, как будто он связывает только функцию on_dropfile
первого объекта).
Есть ли элегантный способ реализовать его для нескольких объектов?
Спасибо за ответ. Я знаю, как работают классы. Помощник - это просто пустой помощник класса, чтобы удерживать позицию мыши, я переместил строку 'Window.bind (mouse_pos = lambda w, p: setattr (helper, 'mpos', p))' к основному классу позже on, поэтому он не выполняется несколько раз. И это не работает как 'on_release', потому что' on_dropfile' - событие окна, а не событие виджета, к сожалению, и я не могу связать его с kv, поскольку он генерирует исключения. Я перешел в PyQt, поскольку он кажется более подходящим для настольных приложений (Киви может сказать, что это для всех, но оптимизирован для мобильных устройств). Но вопрос остается в силе – sanki
@sanki Я его отредактировал, так что он работал – KeyWeeUsr
Спасибо, за новое редактирование, похоже, работает намного лучше :-) – sanki