Kivy:有没有类似于listview的小部件允许显示一个列,但是有另一个与之相关的值(代码)?

时间:2017-06-07 16:35:31

标签: python listview kivy

问题很简单,但我不知道如何在Kivy解决。     我有一些数据,如:代码,名称,地址,护照等。     我喜欢在listview这样的小部件中只显示名称(可以重复),但是当选择名称时,我想知道哪个代码与它相关。

感谢' S

1 个答案:

答案 0 :(得分:0)

我有一个带有gridlayout的workarround(可能是一个盒子但是......)这里是代码:

    while not fin:
        texto = dataSwitch.GetCampo("RCONS", "DIRECCION")
        codigo = dataSwitch.GetCampo("RCONS", "CODIGO")
        label = Label(text = texto)
        label.codigo = codigo
        label.seleccionable = True
        label.seleccionado = False
        self.g_consorcios.add_widget(label)
        if not dataSwitch.MoveCursor("RCONS"):
            fin = True

在标签中我已经放置了我需要的所有内容,然后我需要获取触摸的标签并调用方法在此调用案例中进行选择on_press_algo

def on_touch_down(self, touch):
    ret = super(ConsorciosScreen, self).on_touch_down(touch)
    if ret:
        x2, y2 = self.g_consorcios.parent.to_local(touch.x, touch.y)
        for node in self.g_consorcios.children:
            if node.collide_point(x2, y2):
                self.savex = x2
                self.savey = y2
                self.savenode = node
        ret = True
    return ret        
def on_touch_up(self, touch):
    ret = super(ConsorciosScreen, self).on_touch_up(touch);
    if ret:
        for node in self.g_consorcios.children:
            x2, y2 = self.g_consorcios.parent.to_local(touch.x, touch.y)
            if node.collide_point(x2, y2):
                if node == self.savenode:
                    if x2 <= self.savex + 10 and x2 >= self.savex - 10 and y2 <= self.savey + 10 and y2 >= self.savey - 10:
                        self.on_press_algo(node)
        ret = True
    return ret;

最后在on_press_algo中我假装选择并且瞧,我在nodo中有我的数据。

    if hasattr(nodo, "seleccionable"):
        if nodo.seleccionado:
            nodo.seleccionado = False
            nodo.color = (1,1,1,1)
        else:
            for node in self.g_consorcios.children:
                if hasattr(node, "seleccionable"):
                    node.color = (1,1,1,1)
                    node.seleccionado = False
            nodo.seleccionado = True
            nodo.color = (1,0,0,1)