繁体   English   中英

Kivy:如何从列表中向 StackLayout 添加按钮

[英]Kivy: How to add buttons to StackLayout from a list

我想使用['btn1', 'btn2','btn3']类的值列表在我的布局上动态创建按钮。 之后,我想在按下时捕获按钮的名称,但我被困在添加按钮步骤请帮助这是我的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()

这是我的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')

        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"  

您可以通过在kv中为StackLayout添加一个id来做到这一点:

        StackLayout:
            id: stack

然后在MyLayout class 中添加一个方法来添加Buttons ,并在MyApp class 中调用该方法:

class MyLayout(Widget):
    def add_butts(self, dt):
        btns = ['btn1', 'btn2', 'btn3']
        for i in btns:
            self.ids.stack.add_widget(Button(text=i, size_hint=(None, None), size=(100, 60)))

class MyApp(App):
    def build(self):
        ml = MyLayout()
        Clock.schedule_once(ml.add_butts)
        return ml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM