Избегайте рекурсии привязки для NumericProperty

#python #kivy

#python #kivy

Вопрос:

Мне нужно изменить свойство в функции, которая вызывается при изменении свойства. Это вызывает рекурсию. Например:

 from kivy.app   import App;
from kivy.uix.widget import Widget;
from kivy.uix.button import Button;
from kivy._event        import EventDispatcher;

class test(Button, EventDispatcher):
    def __init__(self):
        super().__init__();

        self.bind(size = self.change_width);


    def change_width(self, instance, value):
        print('im changed');
        self.width-= 20;
        


t = test();
t.width = 120;

class testApp(App):
    def build(self):
        return t;

if __name__ == '__main__':
    testApp().run();

  

Когда где-либо размер кнопки изменился, мне нужно уменьшить эту ширину. Есть ли какой-либо способ избежать рекурсии?

Ответ №1:

Вы можете избежать рекурсии, отключив привязку при изменении width :

 def change_width(self, instance, value):
    print('im changed');
    self.unbind(size=self.change_width);
    self.width -= 20;
    self.bind(size=self.change_width);