Создайте выпадающий список kivy, но только часть из них может быть открыта

Я использую kivy в качестве инструментов графического интерфейса для моей программы на Python. когда я хочу создать таблицу, в которой есть столбец, содержащий раскрывающийся список, чтобы упростить выбор значения. Однако я не могу заставить его работать правильно. Вот мой код.

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()

Только часть кнопки открывает раскрывающийся список, и все выбранное значение заменяет текст последней кнопки. Не могли бы вы мне помочь? Заранее спасибо.


person Jilong Yin    schedule 16.08.2017    source источник


Ответы (1)


После прочтения поста Python Lambda в цикле [Динамическое построение раскрывающихся списков в 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()
person Jilong Yin    schedule 16.08.2017