Python 从类的.kv文件中定义的TextInput获取文本
我有以下python代码:Python 从类的.kv文件中定义的TextInput获取文本,python,kivy,Python,Kivy,我有以下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中:
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
现在,如果我调用进程,我会得到错误“UIApp”对象没有属性“ids”。好吧现在我尝试用UI:AttributeError替换self:'kivy.properties.DictProperty'对象没有属性'input'。尝试寻址“test1”也没有帮助,删除.kv文件中ID周围的“test1”也没有帮助
有没有一种方法可以在不通过编程创建此字段的情况下从字段中获取输入?问题
在kv文件中,您已将id定义为字符串
警告
为id赋值时,请记住该值不是字符串。
没有引号:good->id:value,bad->id:'value'
解决方案
在kv文件中,从所有id中删除单引号
在Python脚本中,将self.ids.input.text替换为self.root.ids.input.text,因为这些ID是在根类UI下定义的
实例
kv文件
输出
正如我在帖子中所说,尝试寻址“test1”也没有帮助,在.kv文件中删除id周围的“test1”也没有帮助。请参阅更新的帖子,其中包含Python脚本、kv文件中的on_text事件以及方法进程输出的打印屏幕。klklkijiojoij工作正常,如果将构建器放置在if _uname _;==_u main _;:
#: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()