Я хочу нарисовать детей киви виджета поверх их родителей "братьев и сестер". Под братом я имею в виду виджет того же класса, что и класс их родителей, но другой экземпляр.
Киви рисует их по умолчанию в том же порядке, что и их соответствующие родители: первый родитель, все его дети, затем второй родитель, все его дети и т. Д. Таким образом, иногда ребенок находится на вершине своего «дяди», а иногда и ниже, в зависимости от того, кто был нарисован первым, их родитель или их «дядя».
Я понимаю основы дерева видений kivy (или, по крайней мере, надеюсь, что понимаю), но не могу понять, как повлиять на порядок рисования детей. Я думаю, должно быть что-то, чего мне не хватает.
В качестве примечания: я хочу создавать (и удалять) дочерние виджеты во время выполнения.
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
<pre><code> class ParentButton(Button):
def __init__(self, pos, **kwargs):
super().__init__(**kwargs)
self.size_hint = None, None
self.pos = pos
def on_release(self):
self.add_widget(ChildButton())
class ChildButton(Button):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.size_hint = None, None
self.pos = (0, 0)
def on_release(self):
if self.parent.pos[0] < 150:
self.pos = (150, 50)
else:
self.pos = (150, 150)
class Layout(FloatLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.add_widget(ParentButton((100, 100)))
self.add_widget(ParentButton((200, 100)))
class TestApp(App):
def build(self):
return Layout()
if __name__ == '__main__':
TestApp().run()
В моем примере кода у меня есть две кнопки, каждая из которых создает дочернюю кнопку. При нажатии дочерней кнопки она перемещается так, что перекрывается со своим собственным родителем и с другой кнопкой, которая не является ее родителем, но того же класса. Кнопка, созданная левой кнопкой, будет нарисована сверху левой кнопки, но ниже правой кнопки. Кнопка, созданная правой кнопкой, будет нарисована поверх обоих. Это на самом деле ожидаемое поведение, но я хочу изменить его так, чтобы все дети были выше (или ниже) всего своего родительского класса. Может кто-нибудь помочь здесь?