动态添加自定义按钮Kivy

2024-10-06 11:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据一些列表创建自定义按钮,在floatlayaout中动态创建。我怎样才能从这里前进

from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image

class Home(ScreenManager):
    pass

class FirstSc(Screen):
    pass

class ImBut(ButtonBehavior, Image):
    pass

class SecSc(Screen):
    pass

class Category(Screen):
    pass

customButton是我在kivy的根小部件中创建的,并且希望根据我将在“SecSc”屏幕布局中提供的列表动态填充它。如何访问custombutton并将其添加到“SecSc”类

root_widget = Builder.load_string('''
Home:
    FirstSc:
    SecSc:
    Category:
`THIS IS THE CUSTOM BUTTON`
<customButton@Button>
    id: custbut
    font_size: 0.65 * self.height
    size_hint: (.15,.1)
    border_radius: [18]
    canvas.before:
        Color:
            rgba: self.back_color
        RoundedRectangle:
            size: self.size
            pos: self.pos
            radius: self.border_radius

<FirstSc>:
    name: '1st'
    FloatLayout:
        canvas.before:
            Rectangle:
                source: 'bg.png'

<SecSc>:
    name: '2nd'
    FloatLayout:
        canvas.before:
            Rectangle:
                source: 'bg.png'
        FloatLayout:
            id: grid
            `HERE I WOULD LIKE TO ADD BUTTONS`
<Category>:
    name: 'category'

''')

class MyiApp(App):
    def build(self):
        return root_widget

MyiApp().run()

Tags: nameself列表sizepassscreenclasscanvas
2条回答

多谢各位。让它工作起来。 下面是它的样子-

    def on_enter(self, *args):
        count = 0
       ab = ["A", "D", "D"]
        self.buttons = []
        for i,j in enumerate(ab):
            self.buttons.append(Factory.ImButb(text=j, on_press=self.o_p))
            self.ids.grid.add_widget(self.buttons[i])
            count += 1
        print(self.buttons)
    def o_p(self, instance):
        print(str(instance.text))

也许这可以让你开始。修改SecSc类:

class SecSc(Screen):
    def on_enter(self, *args):
        count = 0
        for txt in ["Abba", "Dabba", "Doo"]:
            butt = Factory.CustomButton(text=txt, pos=(50, count*75))
            self.ids.grid.add_widget(butt)
            count += 1

on_enter()的使用只是一个例子。关键是使用Factory创建一个仅在kv中定义的Widget

相关问题 更多 >