2017-08-16 18 views
0

私のpythonプログラムのGUIツールとしてkivyを使用しています。 テーブルを作成したいとき、選択値を簡単にするためのドロップダウンリストを含む列があります。 しかし、正しく動作させることはできません。 以下は私のコードです。kivyドロップダウンリストを作成しますが、その一部だけを開くことができます

import kivy 
kivy.require('1.10.0') 

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.dropdown import DropDown 
from kivy.uix.gridlayout import GridLayout 

sel =["A","B","C"] 

class MyGrid(GridLayout): 
    def __init__(self, **kwargs): 
     super(MyGrid, self).__init__(**kwargs) 
     self.redraw() 

    def redraw(self): 

     self.clear_widgets() 
     self.rows = 5 
     self.cols =2 

     for i in range(5): 

      label = Label(text="cell"+str(i+1)) 
      self.add_widget(label) 

      drpName = DropDown() 
      btnName = Button(text="B",size_hint=(None, None)) 
      for e in sel: 
       btn=Button(text=e, size_hint_y=None, height=btnName.height) 
       btn.bind(on_release=lambda btn:drpName.select(btn.text)) 
       drpName.add_widget(btn) 
      btnName.bind(on_release=drpName.open) 
      drpName.bind(on_select=lambda instance, x: setattr(btnName, 'text', x)) 
      self.add_widget(btnName) 

class testApp(App): 
    def build(self): 
     return MyGrid() 

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

ボタンの一部だけがプルダウンリストを開き、選択された値のすべてが最後のボタンのテキストに置き換わります。 私を助けてくれますか?前もって感謝します。

答えて

0

ポストPython Lambdaをループで読むと[Building Dropdowns Dynamically in Kivy、私は自分のプログラムを動作させることができます。

貴重な投稿ありがとうございます。

import kivy 
kivy.require('1.10.0') 

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.dropdown import DropDown 
from kivy.uix.gridlayout import GridLayout 

sel =["A","B","C"] 

class MyGrid(GridLayout): 
    def __init__(self, **kwargs): 
     super(MyGrid, self).__init__(**kwargs) 
     self.redraw() 

    def redraw(self): 

     self.clear_widgets() 
     self.rows = 5 
     self.cols =2 

     drpName = [] 

     for i in range(5): 

      label = Label(text="cell"+str(i+1)) 
      self.add_widget(label) 

      drpName.append(DropDown()) 
      btnName=Button(text="B",size_hint=(None, None)) 
      for e in sel: 
       btn=Button(text=e, size_hint_y=None, height=btnName.height) 
       btn.bind(on_release=lambda btn=btn,dropdown=drpName[i]:dropdown.select(btn.text)) 
       drpName[i].add_widget(btn) 
      btnName.bind(on_release=drpName[i].open) 
      drpName[i].bind(on_select=lambda instance, x,btn=btnName: setattr(btn, 'text', x)) 
      self.add_widget(btnName) 

class testApp(App): 
    def build(self): 
     return MyGrid() 

if __name__=="__main__": 
    testApp().run() 
関連する問題