2016-01-10 110 views
0

因此我想如何动态地向Kivy添加标签,但后来我意识到Kivy已经有一个listview模块,并且这会让事情变得更简单。我发现这个Python Kivy ListView: How to delete selected ListItemButton?答案在学习实现列表视图时很有用,但是我想知道如何添加一个两列的列表视图,这个列表视图是用两个文本框中的文本更新的。我编辑的例子代码为理念,为我所想要做一个证明什么,我至今是:如何动态生成Kivy对象

# main.py 
from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ObjectProperty 
from kivy.uix.listview import ListItemButton 


class TaskButton(ListItemButton): 
    pass 


class TodoRoot(BoxLayout): 
    task_input = ObjectProperty() 
    task_list = ObjectProperty() 

    def add_task(self): 
     self.task_list.adapter.data.extend([self.task_input_1.text + " | " + self.task_input_2.text]) 
     self.task_list._trigger_reset_populate() 

    def del_task(self, *args): 
     if self.task_list.adapter.selection: 
      selection = self.task_list.adapter.selection[0].text 
      self.task_list.adapter.data.remove(selection) 
      self.task_list._trigger_reset_populate() 


class TodoApp(App): 
    def build(self): 
     return TodoRoot() 


if __name__ == '__main__': 
    TodoApp().run() 

# todo.kv 
#: import main main 
#: import ListAdapter kivy.adapters.listadapter.ListAdapter 
#: import ListItemButton kivy.uix.listview.ListItemButton 

TodoRoot: 

<TodoRoot>: 
    orientation: "vertical" 
    task_input_1: task_input_view_1 
    task_input_2: task_input_view_1 
    task_list: tasks_list_view 

    BoxLayout: 
     size_hint_y: None 
     height: "40dp" 

     TextInput: 
      id: task_input_view_1 
      size_hint_x: 70 
     TextInput: 
      id: task_input_view_2 
      size_hint_x: 70 
     Button: 
      text: "Add" 
      size_hint_x: 15 
      on_press: root.add_task() 
     Button: 
      text: "Del" 
      size_hint_x: 15 
      on_press: root.del_task() 
    ListView: 
     id: tasks_list_view 
     adapter: 
      ListAdapter(data=[], cls=main.TaskButton) 

那种作品,但它有点笨重,我想从两个文本输入的文本进入列表视图的单独列,但每行仍然可以被选为一行。

回答

0

不知道它是否正是你所要求的;如果你需要别的东西,写评论:

test.kv:

#:kivy 1.9.1 
Screen: 

    GridLayout: 
     size_hint_y: .7 
     pos_hint: {'y': .3} 
     id: labels_grid 
     cols: 2 

     canvas: # visualize grid layout 
      Color: 
       rgb: 0.3, 0.5, 0.3 
      Rectangle: 
       size: self.size 
       pos: self.pos 

    GridLayout: 
     size_hint_y: .3 
     cols: 1 

     TextInput: 
      id: input_1 

     TextInput: 
      id: input_2 

     MyButton: 
      text: 'add labels to grid' 
      text_1: input_1.text # binding labels text for easy use 
      text_2: input_2.text # with self. 
      on_press: self.add_labels(labels_grid) 

main.py:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.label import Label 


class MyButton(Button): 
    def add_labels(self, grid_handle): 
     text_1 = self.text_1 
     text_2 = self.text_2 
     label_1 = Label(text=text_1) 
     label_2 = Label(text=text_2) 
     grid_handle.add_widget(label_1) 
     grid_handle.add_widget(label_2) 


class Test(App): 
    pass 


Test().run()