2016-09-20 124 views
1

我正在尋找一種方法來設置Kivy Spinner的值,具體取決於從父Spinner中選擇的文本。問題是我已經用kv語言定義了兩個spinners。我不確定這種方法是否會在每次從第一個值中選擇一個新值時銷燬第二個微調器,然後重新生成它(如果是這樣,我不知道該怎麼做,因爲kv代碼),或者如果會有一種方法可以根據更新列表的on_text過程動態更新第二個微調器的「值」。動態更改Kivy Spinner值

在所有情況下,下面的代碼不起作用。任何幫助讚賞。謝謝。

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.spinner import Spinner 

Builder.load_string(''' 
<MainScreen>: 
    AnchorLayout: 
     anchor_x: 'center' 
     anchor_y: 'top' 
     BoxLayout: 
      size_hint: 1, .9 
      orientation: 'vertical' 
      padding: 80 
      spacing: 20 
      Spinner: 
       id: spinner_1 
       text: '<Select>' 
       values: root.pickType 
       on_text: root.updateSubSpinner(spinner_1.text) 
      Spinner: 
       id: spinner_2 
       text: '<Select>' 
       values: root.pickSubType 

    AnchorLayout: 
     anchor_x: 'center' 
     anchor_y: 'bottom' 
     size_hint: 1, .1 
     Button: 
      on_press: root.onExit() 
      text: 'Exit' 
      font_size: 50 

''') 

class MainScreen(FloatLayout): 
    def __init__(self, **kwargs): 
     self.buildLists() 
     super(MainScreen, self).__init__(**kwargs) 

    def buildLists(self): 
     self.pickType = ['Select','#1','#2','#3'] 
     self.pickSubType = ['Select'] 

    def updateSubSpinner(self,text): 
     if text == '#1': 
      self.pickSubType.extend('A'+'B') 
     elif text == '#2': 
      self.pickSubType.extend('P'+'Q') 
     else: 
      self.pickSubType.extend('Y'+'Z') 

    def onExit(self): 
     App.get_running_app().stop() 

class TestApp(App): 
    def build(self): 
     return MainScreen() 

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

回答

1

你應該參考孩子微調值列表,而不是pickSubType名單,甚至沒有綁定到它。例如:

def updateSubSpinner(self, text): 
    self.ids.spinner_2.text = 'Select' 

    if text == '#1': 
     self.ids.spinner_2.values = ['A', 'B'] 
    elif text == '#2': 
     self.ids.spinner_2.values = ['P', 'Q'] 
    else: 
     self.ids.spinner_2.values = ['Y', 'Z'] 

寫入values: root.pickSubTypepickSubType不結合到values,如果第一不是ListProperty。如果你喜歡,你可以將它升級到ListProperty,但這不是必需的。

+0

非常感謝。我認爲這份清單是與紡紗廠綁定的,儘管它似乎只是給紡紗廠提供了它的初始價值,所以我最終正在處理錯誤的物品。再次感謝您的幫助。 –