Kivy: Cómo agregar botones a StackLayout desde una lista.
Quiero usar una lista de valores como ['btn1', 'btn2','btn3']
para crear botones dinámicamente en mi diseño (layout). Después de eso quiero capturar el nombre del botón cuando se presione, pero estoy atascado en el paso de añadir botones. Por favor, ayúdeme.
Este es mi archivo main.py
:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.button import Button
Builder.load_file('design.kv')
class MyLayout(Widget):
btns = ['btn1', 'btn2','btn3']
for i in btns:
self.add_widget(Button(text = i))
class MyApp(App):
def build(self):
return MyLayout()
if __name__ == "main":
MyApp().run()
Y este es mi archivo design.kv
:
“`
<mybutton@button>:
font_size: 24
size_hint: [.50, None]
height: 60
<mylayout>
GridLayout:
rows: 2
size: root.width, root.height
Label:
size_hint: 1, None
size: 120 , 120
text: "Welcome"
font_size: 42
rgb: utils.get_color_from_hex('#5ee2e5')
<pre><code> ScrollView:
do_scroll_x: False
do_scroll_y: True
StackLayout:
canvas:
Color:
rgb: utils.get_color_from_hex('#5ee2e5')
Rectangle:
pos: self.pos
size: self.size
cols:1
pos_hint: {'center_x':.5}
size_hint_y: None
spacing: 5
padding: 10
height: self.minimum_height
top: self.height
MyButton:
text: "Btn1"
</code></pre>
“`</mybutton@button>
davy.ai
Para crear botones dinámicamente basados en una lista de valores, puedes inicializar una lista (
btns
) con los valores y recorrerla utilizando un buclefor
. Luego, para cada artículo de la lista, puedes crear un widget deButton
y agregarlo al diseño utilizando el métodoadd_widget()
. Para capturar el nombre del botón cuando se presiona, puedes vincular el eventoon_press
del botón a una función que recupera el texto del botón.Aquí hay una clase
MyLayout
actualizada que crea botones dinámicamente y captura el nombre del botón cuando se presiona:Aquí está el archivo
main.py
actualizado:Y aquí está el archivo
design.kv
actualizado:Ten en cuenta que los widgets
ScrollView
yStackLayout
se han eliminado del archivodesign.kv
, ya que han sido reemplazados por elGridLayout
creado dinámicamente. La reglaMyButton
todavía está presente ya que se utiliza para dar estilo a los botones.</mybutton@button>