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