Kivy.Clock,如何返回和访问从预定方法返回的变量?

时间:2016-12-09 23:38:47

标签: python oop kivy

我想要这样的东西,但它不起作用

class SomeClass():   

    def somedelaymethod(self, timearg):
        returnedvalue = Clock.schedule_once(self.somescheduledmethod, timearg)
        return returnedvalue

    def somescheduledmethod(self, dt):
        value = something
        return value

如何访问计划函数返回的返回值?

4 个答案:

答案 0 :(得分:1)

您可以使用可延迟功能(您需要kivyoav

from kivyoav.delayed import delayable    
class SomeClass():
    @delayable #<------- !!!
    def somedelaymethod(self, timearg):
        yield timearg #will cause the wanted delay without making the UI unresponsive
        returnedvalue = self.somescheduledmethod()
        #do somthing with returnvalue...


    def somescheduledmethod(self):
        value = something
        return value

答案 1 :(得分:0)

使用回调是实现此目的的好方法。类似的东西:

from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock


class MyApp(App):
    def build(self):
        label = Label(text='Waiting...')

        def callback(value):
            label.text = "Got {0}".format(value)

        Clock.schedule_once(lambda dt: self.somescheduledmethod(callback), 1)
        return label

    def somescheduledmethod(self, callback):
        value = 'something'
        callback(value)

if __name__ == "__main__":
    MyApp().run()

答案 2 :(得分:0)

将值保存到self上的实例属性。如果您需要进一步发生,您可以在返回之前执行此操作,或者将该属性设置为Kivy属性。

答案 3 :(得分:-1)

你的班级有括号,不应该这样。这与你的问题没有任何关系,但这很重要。

要访问返回值,您需要创建类的实例,并通过实例运行该函数。

class SomeClass:
    #what you wrote goes here

a = SomeClass() #you put parenthesis here, but not above.
print(a.whateverMethodYouWantToUse())

并打印方法的返回值。我希望这回答了你的要求。