在python端在Kivy中分配ID [英] asigning ids in kivy on the python side
问题描述
我使用基维.我想做的是有一个'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屋!