我想在他们的父母“兄弟姐妹”上画一个猕猴桃小部件的孩子。同胞,我的意思是与父类的类相同的小部件,但实例不同。 默认情况下,Kivy会按照与各自父母相同的顺序绘制这些图像:第一位父母,其所有子女,第二位父母,其所有子女等。因此,有时一个孩子位于其“叔叔”的上方,有时位于其“叔叔”的下方,取决于先绘制的是他们的父母还是他们的“叔叔”。
我了解kivy小部件树的基本知识(或者至少希望如此),但无法弄清楚如何影响孩子的绘画顺序。我想一定是我想念的东西。 附带说明:我想在运行时创建(和删除)子窗口小部件。
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
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()
在我的代码示例中,我有两个按钮,每个按钮都创建一个子按钮。按下子按钮时,它会移动,使其与自己的父按钮和另一个按钮(不是父按钮,而是同一类)重叠。由左按钮创建的按钮将绘制在左按钮的顶部,但在右按钮的下方。由鼠标右键创建的按钮将被绘制在两者之上。这实际上是预期的行为,但是我想更改它,以便所有孩子都将在其所有父类的上方(或下方)。有人可以帮忙吗?
答案 0 :(得分:0)
可以手动操纵canvas.children列表以影响绘图顺序,而无需完全更改小部件子级的顺序。不过,您可能只需要注意重新排序,而不要除去正常的remove_widget调用之外的任何内容。
通常很少出现这种情况,因为将小部件重新排列为父级的子级通常最简单。