如何将 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