【问题标题】:How to Assign TextInput(Factory object) value to variable如何将 TextInput(Factory object) 值分配给变量
【发布时间】:2021-08-01 08:20:11
【问题描述】:

我一直在尝试将文本输入分配给一个变量 我的 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 对象出现在主网格中

输入值后,我想点击assign按钮进行赋值

【问题讨论】:

    标签: python kivy kivy-language kivymd


    【解决方案1】:

    我想出了一个替代解决方案来解决这个问题,方法是通过 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()
    

    但我仍然希望有人可以通过 App 类解决此问题

    【讨论】:

      【解决方案2】:

      你的代码应该是这样的:

      TextInput:
              size_hint:None,None 
              id:txt
              text:""
      

      您忘记添加text 变量。

      【讨论】:

      • ids没有任何错误,我的TextInput id是'txt',你可能看错了txt_1=self.root.ids.txt.text
      • 你可以在这里找到更多关于'.text'的信息kivy.readthedocs.io/en/master/…
      猜你喜欢
      • 2021-09-14
      • 2021-03-10
      • 2021-09-17
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2017-08-12
      相关资源
      最近更新 更多