动态添加自定义按钮 Kivy



我想根据某个列表创建自定义按钮,在浮动布局中动态。如何从这里转发?

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"屏幕浮动布局中提供的列表动态填充。 如何访问自定义按钮并将其添加到"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()

也许这可以帮助你开始。修改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

谢谢。让它工作了。 这是它的样子——

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))

最新更新