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