StackLayout的Kivy子控件的pos都是(0,0)?

2024-09-27 21:28:46 发布

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

当循环遍历动态添加的StackLayout的子级时(通过循环),所有子级的位置输出为0,0。一个简单的例子:

import kivy
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button

class ThisApp(App):

    def build(self):    

        layout = StackLayout(spacing=10,padding=10)

        for i in range(3):
            layout.add_widget(Button(size_hint=(None,None)))
            print(layout.children[i].pos)

        return layout


ThisApp().run()

输出:

^{pr2}$

为什么会这样?显然,小部件的位置不在窗口的左下角。我完全不明白为什么会这样。StackLayout运行正常,位置正确,但不知何故小部件的位置没有注册?在


Tags: fromimportnoneapp部件动态button例子
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:46

布局不会立即执行,但在必要时,即显示小部件时,因此必须在显示帧后立即使用Clock.schedule_once(...)调用函数。在

import kivy
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
from kivy.clock import Clock

class ThisApp(App):

    def build(self): 

        def callback(dt):
            for i, child in enumerate(self.root.children):
                print(i, child.pos)

        layout = StackLayout(spacing=10,padding=10)
        for i in range(3):
            layout.add_widget(Button(size_hint=(None,None)))
        Clock.schedule_once(callback)
        return layout

if __name__ == '__main__':
    ThisApp().run()

输出:

^{pr2}$

相关问题 更多 >

    热门问题