如何将 TextInput(工厂对象)值分配给变量
How to Assign TextInput(Factory object) value to variable
我一直在尝试将文本输入分配给一个变量
我的 TextInput 对象在工厂对象中 (object_1)
我尝试使用
分配它
txt_1=self.root.ids.txt.text
但它不起作用
这是完整的代码
from kivymd.app import App
from kivy.lang import Builder
from kivy.factory import Factory
kv='''
#:import Factory kivy.factory.Factory
# this is object 1 which will be added to main grid
<object_1@BoxLayout>:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
id:obj_1
TextInput:
size_hint:None,None
id:txt
#main grid
BoxLayout:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
GridLayout:
cols:1
size_hint_y:None
adaptive_height:True
height:self.minimum_height
id:sc_grid
Button:
size_hint:None,None
text: 'Add 1'
on_press:
app.add_1()
Button:
size_hint:None,None
text: 'Assign value'
on_press:
app.Assign()
'''
class MyApp(App):
def build(self):
return Builder.load_string(kv)
def add_1(self):
self.root.ids.sc_grid.add_widget(Factory.object_1())
# this crashes
def Assign(self):
txt_1=self.root.ids.txt.text
MyApp().run()
在上面的代码中 object_1 在按下按钮时添加到主网格
按下时 TextInput 对象出现在主网格中
输入值后,我想点击赋值按钮赋值
你的代码应该是这样的:
TextInput:
size_hint:None,None
id:txt
text:""
您忘记添加 text
变量。
我想出了一个替代解决方案来解决这个问题,方法是通过 kv 分配它,
这是代码
from kivymd.app import App
from kivy.lang import Builder
from kivy.factory import Factory
kv='''
#:import Factory kivy.factory.Factory
# this is object 1 which will be added to main grid
<object_1@BoxLayout>:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
id:obj_1
TextInput:
size_hint:None,None
id:txt
Button:
size_hint:None,None
text: 'Assign value'
on_press:
txt_1=root.ids.txt.text
#main grid
Screen:
id:scrn
BoxLayout:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
GridLayout:
cols:1
size_hint_y:None
adaptive_height:True
height:self.minimum_height
id:sc_grid
Button:
size_hint:None,None
text: 'Add 1'
on_press:
app.add_1()
'''
class MyApp(App):
def build(self):
return Builder.load_string(kv)
def add_1(self):
self.root.ids.sc_grid.add_widget(Factory.object_1())
MyApp().run()
但我还是希望有人能通过应用程序解决这个问题class
我一直在尝试将文本输入分配给一个变量 我的 TextInput 对象在工厂对象中 (object_1)
我尝试使用
分配它
txt_1=self.root.ids.txt.text
但它不起作用
这是完整的代码
from kivymd.app import App
from kivy.lang import Builder
from kivy.factory import Factory
kv='''
#:import Factory kivy.factory.Factory
# this is object 1 which will be added to main grid
<object_1@BoxLayout>:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
id:obj_1
TextInput:
size_hint:None,None
id:txt
#main grid
BoxLayout:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
GridLayout:
cols:1
size_hint_y:None
adaptive_height:True
height:self.minimum_height
id:sc_grid
Button:
size_hint:None,None
text: 'Add 1'
on_press:
app.add_1()
Button:
size_hint:None,None
text: 'Assign value'
on_press:
app.Assign()
'''
class MyApp(App):
def build(self):
return Builder.load_string(kv)
def add_1(self):
self.root.ids.sc_grid.add_widget(Factory.object_1())
# this crashes
def Assign(self):
txt_1=self.root.ids.txt.text
MyApp().run()
在上面的代码中 object_1 在按下按钮时添加到主网格
按下时 TextInput 对象出现在主网格中
输入值后,我想点击赋值按钮赋值
你的代码应该是这样的:
TextInput:
size_hint:None,None
id:txt
text:""
您忘记添加 text
变量。
我想出了一个替代解决方案来解决这个问题,方法是通过 kv 分配它, 这是代码
from kivymd.app import App
from kivy.lang import Builder
from kivy.factory import Factory
kv='''
#:import Factory kivy.factory.Factory
# this is object 1 which will be added to main grid
<object_1@BoxLayout>:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
id:obj_1
TextInput:
size_hint:None,None
id:txt
Button:
size_hint:None,None
text: 'Assign value'
on_press:
txt_1=root.ids.txt.text
#main grid
Screen:
id:scrn
BoxLayout:
orientation:'vertical'
size_hint_y:None
adaptive_height: True
height:self.minimum_height
GridLayout:
cols:1
size_hint_y:None
adaptive_height:True
height:self.minimum_height
id:sc_grid
Button:
size_hint:None,None
text: 'Add 1'
on_press:
app.add_1()
'''
class MyApp(App):
def build(self):
return Builder.load_string(kv)
def add_1(self):
self.root.ids.sc_grid.add_widget(Factory.object_1())
MyApp().run()
但我还是希望有人能通过应用程序解决这个问题class