2016-12-09 45 views
2

我想是這樣的,但它不工作Kivy.Clock,如何返回並訪問從調度方法返回的變量?

class SomeClass(): 

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

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

我如何可以訪問由預定函數返回的返回值?

+0

你不能像這樣構造你的代碼,時鐘調用不會阻塞並等待返回一個值。如果您看不到另一種方式來實現這一點,請發佈一個完整的最小可運行示例,以展示您希望以這種方式實現並希望實現的目標。 – inclement

回答

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

你的課有括號,它不應該。這與你的問題沒有任何關係,但這很重要。

要訪問返回值,需要創建一個類的實例,並通過該實例運行該函數。

class SomeClass: 
    #what you wrote goes here 

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

它打印方法的返回值。我希望這回答你所問的。

+0

公平的,我打算放(SomeInheritance),但爲了速度,我錯過了它,忘記刪除括號,因爲我問的是敏捷。然而,這並不回答這個問題,因爲kivy.clock行爲不同,我想通過預定的時鐘訪問該方法,而不是按照您指定的方式進行,但是仍然要感謝 –

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() 
0

保存價值的實例上self屬性。如果您需要進一步發生事情,您可以在返回之前執行此操作,或者將該屬性設置爲Kivy地產。

相關問題