在python端在Kivy中分配ID [英] asigning ids in kivy on the python side

查看:165
本文介绍了在python端在Kivy中分配ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用基维.我想做的是有一个'idea',一个滑块和一个标签,该标签在网格布局中的一行中包含滑块的当前值

im using kivy. the what im trying to do is have and 'idea',a slider and a label containing the slider's current value in a row in a grid layout

现在获取布局很好,但是获取标签的文本值与滑块的当前值相同是很棘手的.我正在尝试使用字符串确认来指代与后缀与之配对的滑块具有相同数字后缀的标签.

now getting the layout is fine but getting the label to have a text value the same as the slider's current value is tricky. I'm trying to use string concation to refer to the label with the same number suffix as the slider that it is paired with.

我认为我遇到的问题是,当我通常必须在kv端完成id时,im试图在python端分配id.当kv通常期望纯文本时,这就是事实或我要分配的id是字符串.任何帮助将不胜感激

I think the problem im having is that im trying to assign ids on the python side when they normally have to be done on the kv side. It's either that or the fact the ids i'm assigning are strings when kv would normally expect plain text. any help would be appreciated

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_label = self.ids ['value_label _'+ str(s [12:])] KeyError:"value_label _"

value_label=self.ids['value_label_'+str(s[12:])] KeyError: 'value_label_'

推荐答案

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

self.ids only collects ids from children in the kv language rule of the widget. It doesn't know about widgets you added via python.

虽然您不需要使用ID.在这种情况下,您可以保留id字典->小部件键.

You don't need to use the id though. In this case you could keep e.g. a dictionary of id -> widget keys.

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_dict['value_label_' + str(s[12:])]或任何您喜欢的东西访问它.

Then later you can access it with self.keys_dict['value_label_' + str(s[12:])] or whatever you like.

我想在实践中,您也可以用相同的方式修改实际的id字典,尽管我主观上认为最好使用自己的字典来表示更具体的内容.

I suppose in practice you could also modify the actual ids dictionary in the same way, though I subjectively feel it is preferable to maintain your own dictionary with a name that represents its more specific contents.

这篇关于在python端在Kivy中分配ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆