我有两个文件test.py
和test.kv
在test.kv text: "+Add More"
中添加行动态垂直位置。我在.py中创建动态id
self.add_widget(Row(button_text=str(self.row_count),id=str("test"+str(self.row_count))))
在.kv文件中,我正在分配ID
id : root.id
任何人都可以告诉我如何在value1,value2,value3
文件中获取所有动态值.py
任何建议或指导将不胜感激.. !!
[![在此输入图片说明] [1]] [1]
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty, ListProperty, StringProperty, ObjectProperty, NumericProperty
Window.size = (450, 525)
class display(Screen):
def add_more(self):
self.ids.rows.add_row()
def insert_value(self):
print(Row().id)
#print(self.ids.)
class Row(BoxLayout):
button_text = StringProperty("")
id = ObjectProperty(None)
class Rows(BoxLayout):
orientation = "vertical"
row_count = 0
def __init__(self, **kwargs):
super(Rows, self).__init__(**kwargs)
self.add_row()
def add_row(self):
self.row_count += 1
self.add_widget(Row(button_text=str(self.row_count),id=str("test"+str(self.row_count))))
class test(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
test().run()
<Row>:
#state1 : state1
orientation: "horizontal"
spacing: 0, 5
Button:
text: root.button_text
size_hint_x: .2
TextInput:
#text : root.id
size_hint_x: .8
id : root.id
display:
BoxLayout:
orientation: "vertical"
padding : 20, 20
BoxLayout:
orientation: "horizontal"
Button:
size_hint_x: .2
text: "+Add More"
valign: 'bottom'
on_press: root.add_more()
BoxLayout:
orientation: "horizontal"
Label:
size_hint_x: .2
text: "SN"
valign: 'bottom'
Label:
size_hint_x: .8
text: "Value"
valign: 'bottom'
Rows:
id: rows
BoxLayout:
orientation: "horizontal"
padding : 10, 0
spacing: 10, 10
size_hint: .5, .7
pos_hint: {'x': .25, 'y':.25}
Button:
text: 'Ok'
on_release:
root.insert_value()
Button:
text: 'Cancel'
on_release: root.dismiss()
首先你必须访问Rows
我们使用id,因为他有一个id:
Rows:
id: rows
然后你通过孩子访问每个Row
,因为当你使用add_widget时存储在这个ListProperty
中,同样是用Row完成的,但isinstance()
用于过滤TextInput
,之后获取文本并添加到列表中。
应该指出的是,年龄最大的孩子最终因为使用了reversed()
。
from kivy.uix.textinput import TextInput
[...]
def insert_value(self):
values = []
rows = self.ids.rows
for row in reversed(rows.children):
for ch in row.children:
if isinstance(ch, TextInput):
values.append(ch.text)
print(values)