Если у меня есть динамически определенный класс, такой как этот:
<Foo@BoxLayout>:
orientation: "vertical"
...some other child widgets...
BoxLayout:
id: target
orientation: "horizontal"
...other children...
Как мне создать класс, который наследуется от этого, с единственным изменением, являющимся дополнительным виджетом, добавленным к BoxLayout
с id: target
?
Я попытался изменить динамические классы на правила и определить классы в питоне:
class Foo(BoxLayout):
pass
class EditedFoo(Foo):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.ids["target"].add_widget(<the widget I want to add>, index=0)
однако идентификаторы были пустыми из функции __init__
(и из функции on_parent
).
Есть ли способ сделать это без переопределения всего класса?
Редактировать:
from kivy.app import App
from kivy.lang.builder import Builder
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
kv = """
BoxLayout:
EditedFoo:
<Foo>:
orientation: "vertical"
BoxLayout:
id: target
orientation: "horizontal"
"""
class TestApp(App):
def build(self):
return Builder.load_string(kv)
class Foo(BoxLayout):
pass
class EditedFoo(Foo):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.ids["target"].add_widget(Button(text="hello"), index=0)
TestApp().run()
Вот полный проверенный пример того, как он не работает