Kivy:绑定两个方法,一个接一个地调用

时间:2017-04-10 20:02:11

标签: python kivy

我有一个C类,有两个方法,a和b,我希望其中一个(b)总是在另一个之后调用(a)

class C(Widget) :
 def __init__(self) :
  super(C, self).__init__() 
  self.bind(a=self.b)  # something like this 
 def a(self) : pass
 def b(self) : pass

如何?

2 个答案:

答案 0 :(得分:0)

如何从a调用b。

def a(self) :
    #some code
    self.b()

答案 1 :(得分:0)

我不太清楚为什么它不能通过绑定工作,但我认为它与使用不同的对象有关,例如绑定到一个未执行的旧方法或那种意义上的东西。

这是super()拯救的地方。您看,super()不仅用于调用您继承的类的__init__(),还有其他用途。

我刚刚将__init__()替换为<overridden method>()

from kivy.base import runTouchApp
from kivy.uix.button import Button

class MyBase(Button):
    def overridden(self, *args):
        self.stable()

    def stable(self, *args):
        print('stable')

class MyButton(MyBase):
    def __init__(self, **kwargs):
        super(MyButton, self).__init__(**kwargs)
        self.bind(on_release=self.overridden)

    def overridden(self, *args):
        # run before overriden stuff
        super(MyButton, self).overridden()

        print('new overridden')

        # run after overridden stuff
        super(MyButton, self).overridden()
runTouchApp(MyButton())