我在python中有以下代码:
from kivy.app import App
from kivy.uix.widget import Widget
class UI(Widget):
pass
class UIApp(App):
def build(self):
return UI()
def process(self):
text = self.ids.input.text
print(text)
以及在UI.kv中:
#:kivy 1.0.9
<UI>:
title: 'InputDialog'
auto_dismiss: False
id: 'test1'
RelativeLayout:
orientation: 'vertical'
pos: self.pos
size: root.size
id: 'test2'
TextInput:
id: 'input'
hint_text:'Enter compounds'
pos_hint: {'center_x': 0.5, 'center_y': 0.705}
size_hint: 0.95, 0.5
现在,如果我调用process(),则会收到错误'UIApp' object has no attribute 'ids'
。好的。现在,我尝试将self
替换为UI
:AttributeError: 'kivy.properties.DictProperty' object has no attribute 'input'
。尝试获取'test1'也无济于事,也没有删除.kv文件中ID周围的'。
有没有一种方法可以从字段中获取输入而无需以编程方式创建此字段?
答案 0 :(得分:1)
在您的kv文件中,您已将id
定义为字符串。
警告
为ID分配值时,请记住该值不是字符串。 没有引号:好-> id:值,差-> id:“值”
id
中的单引号self.ids.input.text
替换为self.root.ids.input.text
,因为ids
是在根class UI()
下定义的。#:kivy 1.0.9
<UI>:
title: 'InputDialog'
auto_dismiss: False
id: test1
RelativeLayout:
orientation: 'vertical'
pos: self.pos
size: root.size
id: test2
TextInput:
id: input
hint_text:'Enter compounds'
pos_hint: {'center_x': 0.5, 'center_y': 0.705}
size_hint: 0.95, 0.5
on_text: app.process()
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
Builder.load_file('main.kv')
class UI(Widget):
pass
class UIApp(App):
def build(self):
return UI()
def process(self):
text = self.root.ids.input.text
print(text)
if __name__ == "__main__":
UIApp().run()