問題描述
我正在使用 kivy.我想做的是擁有和想法",一個滑塊和一個標簽,該標簽在網格布局中的一行中包含滑塊的當前值
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 端完成時,我試圖在 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
在widget的kv語言規則中只收集children的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.
我想在實踐中您也可以以相同的方式修改實際的 ids 字典,盡管我主觀上認為最好使用代表其更具體內容的名稱來維護您自己的字典.
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的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!