Python 如何动态生成Kivy对象

Python 如何动态生成Kivy对象,python,kivy,Python,Kivy,所以我想出了如何动态地给Kivy添加标签,但后来我意识到 Kivy已经有了一个listview模块,这将使事情变得更简单。我发现这个答案在学习实现listview时很有用,但我想知道如何添加一个两列listview,该listview使用两个文本框中的文本进行更新。我编辑了示例中的代码,作为我想做什么的概念证明,到目前为止,我拥有的是: # main.py from kivy.app import App from kivy.uix.boxlayout import BoxLayout from

所以我想出了如何动态地给Kivy添加标签,但后来我意识到 Kivy已经有了一个listview模块,这将使事情变得更简单。我发现这个答案在学习实现listview时很有用,但我想知道如何添加一个两列listview,该listview使用两个文本框中的文本进行更新。我编辑了示例中的代码,作为我想做什么的概念证明,到目前为止,我拥有的是:

# 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
#:导入主
#:导入ListAdapter kivy.adapters.ListAdapter.ListAdapter
#:导入ListItemButton kivy.uix.listview.ListItemButton
托多罗:
:
方向:“垂直”
任务\输入\ 1:任务\输入\视图\ 1
任务输入2:任务输入视图1
任务列表:任务列表视图
盒子布局:
尺寸提示:无
高度:“40dp”
文本输入:
id:任务\输入\视图\ 1
尺寸提示:70
文本输入:
id:任务\输入\视图\ 2
尺寸提示:70
按钮:
正文:“添加”
尺寸提示:15
按:root.add_task()
按钮:
案文:“德尔”
尺寸提示:15
按:root.del_task()
列表视图:
id:任务\列表\视图
适配器:
ListAdapter(数据=[],cls=main.TaskButton)

这种方式很有效,但有点笨重,我希望将两个文本输入的文本放入listview的单独列中,但每一行仍然可以选择为一行。

不确定它是否正是您所要求的;如果您需要其他内容,请在评论中写下:

试验电压(千伏):

#: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()
#!/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()