2017-08-16 16 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()