2017-08-16 14 views
0

我使用kivy作爲我的python程序的GUI工具。 當我想創建一個表,其中有一列包含下拉列表,使選擇值更容易。 但是,我無法使其正常工作。 以下是我的代碼。只有創建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()