2013-10-13 69 views
0

正如標題所說,我試圖在每次更改值時打印出Switch小部件的值。我已經設法寫回調本身,但我似乎無法弄清楚在我的.kv文件中傳遞迴調的參數。回調使用.kv文件打印kivy Switch Widget的狀態

現在我得到的錯誤:回調()到底需要2個參數(1給出)'

from kivy.config import Config 
Config.set('graphics', 'width', '600') 
Config.set('graphics', 'height', '300') 
Config.set('graphics', 'resizable', 0) 
from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 
from kivy.properties import ObjectProperty 
from kivy.uix.switch import Switch 

Builder.load_file('hueLayout.kv') 

class hueLayout(BoxLayout): 
    pwr1_switch = ObjectProperty() 


    def callback(instance, value): 
     print 'instance: ', instance 
     print 'value: ', value 


    #pwr1_switch.bind(pwr1_switch, active=callback) 

class HueController(App): 
    def build(self): 
     #self._app_window_size = 5, 20 
     return hueLayout() 

if __name__ == '__main__': 

    Config.write() 
    HueController().run() 

<hueLayout>: 
    #size_hint: .5, .5 
    #pos_hint: {'center_x': .5, 'center_y': .5} 
    #height: '200dp' 
    #width: '100dp' 
    pwr1_switch: pwr1_input 

    TabbedPanel: 
     do_default_tab: False 

     TabbedPanelItem: 
      text: 'Master' 
      GridLayout: 
       cols: 3 

       Switch: 
        id: pwr1_input 
        active: root.callback() 



     TabbedPanelItem: 
      text: 'Light 1' 
      BoxLayout: 

     TabbedPanelItem: 
      text: 'Light 2' 

     TabbedPanelItem: 
      text: 'Light 3' 

感謝

回答

4

好了,你有實際的錯誤是因爲你有

def callback(instance, value): 
    print 'instance: ', instance 
    print 'value: ', value 

再後來

   active: root.callback() 

但回調函數有兩個參數(你所撥打的實例和值),那麼自然你,你沒有提供足夠的錯誤。

它看起來像你的問題有3個部分組成:

1)說active: root.callback()嘗試設置結果回調活動屬性。這與你想要的相反,你想要的電話回調()當活動的屬性更改。您可以改爲on_active: root.callback()以在活動更改時調用該功能。 2)請記住,在kv語言的冒號右邊的所有內容都只是python。這意味着如果你調用一個函數,你必須給它正確的參數,沒有什麼是隱含的。在你的情況,你沒有參數調用callback(),而期望兩個。 on_active方法會自動接收我認爲您真正想要的兩個參數,這些參數在kv語言中可通過in the documentation所述的'args'關鍵字訪問。你可以做on_active: root.callback(*args)來傳遞這些信息。

3)作爲一個類方法,callback()自動接收類實例作爲隱含的第一個參數,通常只稱爲self。實例和值是也通過。您可以在properties documentation中查看示例,搜索on_a。所以你需要def callback(self, instance, value)才能工作。

+0

我故意保持活動狀態:root.callback()爲空,因爲我不知道該放什麼。但是,謝謝你,這完美地解決了我的問題。我不明白,你可以添加'on_'屬性來改變時調用。 –