2016-09-20 192 views
1

親スピナーから選択したテキストに応じてKivy Spinnerの値を設定する方法を探しています。問題は、両方のスピナーをkv言語で定義したことです。新しい値が最初の値から選択されるたびに2番目のスピンナーを破棄し、それを再生成する方法があるかどうかはわかりません(もしそうならkvコードのためにそれをどうするかわかりません)。リストを更新するon_textプロシージャに基づいて、2番目のスピンナの「値」を動的に更新する方法があります。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リスト、子スピナー値のリストを参照する必要があります。例:最初はListPropertyでない場合values: root.pickSubTypeは、valuespickSubTypeを結合しない書き込み

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'] 

。必要に応じてListPropertyにアップグレードすることもできますが、必要はありません。

+0

ありがとうございました。リストはスピナーにバインドされていると思っていましたが、明らかにスピナーの初期値だけを提供するように見えるので、最後に間違ったオブジェクトを作成していました。助けてくれてありがとう。 –

関連する問題