【发布时间】:2019-10-31 10:08:26
【问题描述】:
我使用 kv 语言在 .kv 文件中动态创建了 textinput 小部件。但是我想通过引用它们的 id 使用 for 循环在主 python 文件中设置文本。 我写了以下代码:
main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
class setText(Widget):
def __init__(self,**kwargs):
super().__init__(**kwargs)
texts=['txtip1','txtip2']
IDS=self.ids.keys()
for i in range(IDS):
self.ids[IDS[i]].text=texts[i]
class DocApp(App):
def build(self):
return Builder.load_file("docapp\Doc.kv")
return setText()
if __name__=="__main__":
DocApp().run()
文档.kv
# File: docapp.py
#: import TextInput kivy.uix.textinput.TextInput
GridLayout:
cols:1
on_kv_post:
[self.add_widget(TextInput(id=str(i))) for i in range(2)]
我已经搜索了其他问题,但找不到合适的解决方案。请帮忙
【问题讨论】:
-
问题是你的
TextInputs不是由kv lang添加的,而是由GridLayout的add_widget()方法添加的。为了使ids可用,必须以kv样式 (id: theId) 添加它们。我已经看到这已完成,但找不到描述它的帖子。本质上,您将调用一个创建kv字符串的方法,并使用Builder.load_string()来加载它。这可以在if __name__=="__main__":块内完成,就在开始App之前。 -
能否请您强调要在代码中进行哪些更改..谢谢
标签: python-3.x kivy kivy-language