在python端的kivy中设置ID

在python端的kivy中设置ID,python,python-2.7,kivy,Python,Python 2.7,Kivy,我在用kivy。我想做的是在网格布局的一行中有一个“idea”和一个滑块以及一个包含滑块当前值的标签 现在获取布局很好,但是获取标签的文本值与滑块的当前值相同是一件棘手的事情。我尝试使用字符串concation来引用与滑块配对的标签具有相同数字后缀的标签 我认为我遇到的问题是,我试图在python端分配ID,而这些ID通常必须在kv端完成。这或者是因为我分配的ID是字符串,而kv通常需要纯文本。任何帮助都将不胜感激 class ScatterTextWidget(FloatLayout):

我在用kivy。我想做的是在网格布局的一行中有一个“idea”和一个滑块以及一个包含滑块当前值的标签

现在获取布局很好,但是获取标签的文本值与滑块的当前值相同是一件棘手的事情。我尝试使用字符串concation来引用与滑块配对的标签具有相同数字后缀的标签

我认为我遇到的问题是,我试图在python端分配ID,而这些ID通常必须在kv端完成。这或者是因为我分配的ID是字符串,而kv通常需要纯文本。任何帮助都将不胜感激

class ScatterTextWidget(FloatLayout):
        def run_me(self):
            r=1 
            main_list=self.ids.main_list
            main_list.clear_widgets()
            main_list.height=0
            for idea in imported_ideas:     
                main_list.add_widget(Label(text=idea,color=(0,0,0,1),id='idea_label_'+str(r)))
                main_list.add_widget(Slider(id='Slider_'+str(r),min=0,max=10,value=5, step=1,on_value_pos=self.slider_slid(self)))
                main_list.add_widget(Label(color=(0,0,0,1),id='value_label_'+str(r)))

                value_label=self.ids['value_label_'+str(r)] # get this working and then apply the method into slider slid
                value_label.text='xxx'

                main_list.height+=35                

                r +=1
            button_1=self.ids.button_1
            button_1.text='Begin'
            button_1.bind(on_press=self.begin)

        def slider_slid(self,sender):

            s=str(sender.id)

            value_label=self.ids['value_label_'+str(s[12:])]
            value_label.text=str(sender.value)
value\u label=self.ids['value\u label\u'+str(s[12:])]
KeyError:“value\u label”

self.ids
仅从小部件的kv语言规则中的子项收集ID。它不知道您通过python添加的小部件

不过,您不需要使用id。在这种情况下,您可以保留一个id->widget键的字典

self.keys_dict = {}
for idea in imported_ideas:     
    new_widget = Label(color=(0,0,0,1),id='value_label_'+str(r)))
    main_list.add_widget(new_widget)
    self.keys_dict['value_label_' + str(r)] = new_widget
然后,您可以使用
self.keys\u dict['value\u label.'+str(s[12:])]
或任何您喜欢的工具访问它


我想在实践中,您也可以用同样的方式修改实际的ids字典,尽管我主观上认为最好使用一个代表其更具体内容的名称来维护您自己的字典。

谢谢!!我现在有一个新问题,我制作的每个滑块都有一个事件调度,它是一个函数,使用可爱的字典方法将滑块的值赋予标签以显示为文本。但是,为了获得正确的配对,它需要知道哪个滑块发送了它(滑块1、滑块2等),我如何才能做到这一点?我发现这很棘手,因为事件分派不能接受参数。当我意识到分派函数将发送对象作为参数移交时,我解决了上述问题,因此通过反转我创建的字典,我可以获得发送对象的字符串名称(在本例中为滑块)从字符串名称中,我可以切分并得到数字:)非常感谢。