我有一个包含许多按钮的DropDown和一个包含许多字符串的列表,因此按钮中的每个文本都应该是列表中的字符串(button1具有列表中的第一个字符串,button2具有秒数字符串,依此类推。是我所有的按钮文本只有列表中的最后一个字符串。
我基本上试图做一个简单的循环,在该循环上遍历列表,并将结果设置在StringProperty中,然后将StringProperty放在kv文件中按钮上的“文本”上。
.py:
# Here is the list
clientes = ['Sercom', 'Lideranca', 'Winover']
class MyScreenManager(ScreenManager):
button_text = StringProperty('Clients')
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.dropdown = CustomDropDown1(self)
def open_drop_down(self, widget):
self.dropdown.open(widget)
class MyScreen(Screen):
def __init__(self, **kwargs):
super(MyScreen, self).__init__(**kwargs)
class CustomDropDown1(DropDown):
client_text = StringProperty()
def __init__(self, screen_manager, **kwargs):
super(CustomDropDown1, self).__init__(**kwargs)
self.sm = screen_manager
self.is2Displayed = False
# Here is my loop
for message in clientes:
self.client_text = message
class GuiApp(App):
def build(self):
return MyScreenManager()
if __name__ == '__main__':
GuiApp().run()
.kv:
<MyScreenManager>:
MyScreen:
FloatLayout:
Button:
text: root.button_text
size: (200, 50)
size_hint:(None,None)
pos_hint: {'center_x': 0.5, 'top': 1.0}
on_release: root.open_drop_down(self)
<CustomDropDown1>:
padding: [0,0,0,0]
Button:
text: root.client_text
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
Button:
text: root.client_text
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
在我的情况下,第一个按钮的文字应为“ Sercom”,第二个按钮的文字应为“ Lideranca”,第三个按钮的文字为“ Winover”。
但是所有按钮上的文字都是“ Winover”
答案 0 :(得分:0)
由于按钮文本不会更改,因此不需要client_text
StringProperty
。如果您需要更改StringProperty
或Button
的文本,那么Label
就是很好的选择,但在这里不需要。
有几种方法可以实现您想要的。这是我直接使用clientes
列表的第一个想法。我已将clientes
类中的CustomDropDown1
列表移到了class CustomDropDown1(DropDown):
clientes = ['Sercom', 'Lideranca', 'Winover']
def __init__(self, screen_manager, **kwargs):
super(CustomDropDown1, self).__init__(**kwargs)
self.sm = screen_manager
self.is2Displayed = False
for button_num in range(2):
id = 'button' + str(button_num)
self.ids[id].text = self.clientes[button_num]
类中,因为它是在其中使用的。
text:
我还向您的按钮添加了ID,并删除了kv
文件中的<CustomDropDown1>:
padding: [0,0,0,0]
Button:
id: button0
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
Button:
id: button1
size:(200,50)
size_hint:(None,None)
text_size: self.size
valign: 'center'
padding: (10,0)
on_release: root.select(self.text)
属性:
id
因此,每个按钮都有一个形式为'button#'的__init__()
,其中'#'是按钮编号,然后CustomDropDown1
的{{1}}方法中的循环将建立按钮id基于数字,并使用数字作为clientes
列表的索引来设置文本。
另一种方法是完全消除循环,只需将按钮文本设置为
text: root.clientes[0]
第一个按钮,和
text: root.clientes[1]
接下来的内容,依此类推(以clientes
类中的CustomDropDown1
列表为例。