2016-11-13 8 views
0

こんにちは私はkivy DropDownについて質問があります。私はこの例を持っている:テキスト形式kivyドロップダウンボタンをトラッキングする

def dropdownbutton(self): 
    dropdown = DropDown() 
    classlist = ['Barbarian', 'Knight', 'Sorcerer', 'Typical Seba', 'Hunter'] 
    for index in classlist: 
     btn = Button(text='%s' % index, size_hint_y=None, height=44) 
     btn.bind(on_release=lambda btn: dropdown.select(btn.text)) 
     dropdown.add_widget(btn) 
    mainbutton = Button(text='Class', size_hint=(None, None)) 
    mainbutton.bind(on_release=dropdown.open) 
    dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', 
                 x)) 
    return mainbutton 

そして、何私がやりたいことは、私は、選択したそのダムをMBYが、私はこれに時間ほど費やしたbtn.txt電流を追跡することです...あなたは私を助けることができますか? btn.text私はいつもHunterを返します

+0

私は手掛かりがありませんあなたの問題は何ですか?デフォルトのボタンは 'Class'というテキストを持ち、' ​​DropDown'のボタンとして分割された 'classlist'を返し、ドロップダウンボタンをクリックするとテキストが正しく変更されます。これ以上の説明、スクリーンショット、またはその他のコードはどうぞ。 – KeyWeeUsr

+0

はい、正しいです、 'DropDown'ボタンでテキストが正しく変更されますが、私は選択したボタンでクラス**ベース**を開始するために、別の変数にボタンからのテキストを格納する必要があります。私は 'class Knight'のインスタンスを' btn.text'で作成したいのですが、どうやって行うのか知っていますが、現在の 'btn.text'を取得できません – Moyaa

答えて

0

このclassic problemはループ内でラムダ関数を定義するとヒットしました。試してみてください:

btn.bind(on_release=lambda btn=btn: dropdown.select(btn.text)) 
+0

私はそうは思わない、私は問題だと思う'dropdown.bind(on_select = lambda instance、x:setattr(mainbutton、 'text'、x))'ここではテキストを 'mainbutton'に設定しますが、選択した' btn.text 'を変数に変換し、それを他の方法で使用します。 – Moyaa

0

をだから私は、このクラスの周りの仕事のようなものを作った:

class DropdownList(Button): 

    def __init__(self, label, labels): 
     Button.__init__(self, 
         text=label, 
         size_hint=(None, None)) 

     self.buttons = [] 
     self.list = DropDown() 

     for label in labels: 
      b = Button(text=label, notify=None, callback=None) 
      b.size_hint = (None, None) 
      self.buttons.append(b) 
      self.list.add_widget(b) 

     self.bind(on_release=self.list.open)` 

このクラスでは私はこのようなすべてのボタンに特殊な動作を添付することができます行動で

def build(self): 
     classlist = ['Barbarian', 'Knight', 'Sorcerer', 'Typical Seba', 'Hunter'] 
     self.lst = DropdownList("Class", classlist) 
     self.lst.buttons[0].bind(on_release=self.randomfunction) 
     print self.lst.buttons[0].text 

メソッドeventを引数として渡す必要があります。

def randomfunction(self, event): 
     print "random string" 

しかし、まだ問題はほとんどありません。 self.list DropDownボタンのテキストを変更するにはsetattrできません。ここに何か不足していますか?私はちょうどすべてのボタンの2つの動作をしたい。 One:選択したボタンからテキストを取り出し、ドロップダウンボタンに入れて閉じます。 2番目:選択されたボタンのテキストで、ボタンと同じ名前のクラスのインスタンスを作成...それは今のように残しますが、誰でもそれを解決できれば偉大になります

関連する問題