使用大小提示时如何获得Kivy布局的绝对大小

时间:2015-06-21 20:56:05

标签: python layout size kivy

我一直在使用大小提示来调整Kivy中的许多布局。但是,无论何时使用大小提示,我都无法从size属性中获取布局的绝对大小(像素大小)。我发现在将size_hint设置为None后,您只能从布局的size属性中获得绝对大小。如何同时获得绝对大小和使用大小提示?有没有我可以打电话的方法或东西?

我在下面添加了一个简单的例子。

i=i/10

打印出来:

from kivy.lang import Builder
from kivy.lang import Builder
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window

Builder.load_string('''
<MasterLayout>:
    orientation: 'vertical'

    BoxLayout:
        id: layout1
        orientation: 'vertical'
        size_hint: 1.0, 0.2
        canvas:
            Color:
                rgb: 1, 0, 0
            Rectangle:
                size: self.size
                pos: self.pos

    BoxLayout:
        id: layout2
        orientation: 'vertical'
        size_hint: 1.0, 0.8
        canvas:
            Color:
                rgb: 0, 1, 0
            Rectangle:
                size: self.size
                pos: self.pos
''')


class MasterLayout(BoxLayout):

    def __init__(self, **kwargs):
        super(MasterLayout, self).__init__(**kwargs)

        Window.size = [300, 300]
        print self.ids['layout1'].size
        print self.ids['layout1'].size_hint
        print self.ids['layout2'].size
        print self.ids['layout2'].size_hint

class myApp(App):

    def build(self):

        app = MasterLayout()

        print app.ids['layout1'].size
        print app.ids['layout1'].size_hint
        print app.ids['layout2'].size
        print app.ids['layout2'].size_hint

        return app


if __name__=='__main__':

    myApp().run()

我应该得到的两个尺寸列表是layout1的[300,60]和layout2的[300,240]。在更改窗口大小后,我需要 init 块中某些布局的绝对大小。与上面的简单代码类似。我可以根据大小提示和窗口大小来计算它,但是当我开始嵌套多层布局时,它会变得复杂,这些布局可能包括也可能不包括窗口小部件之间的填充和间距。再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

size属性确实包含窗口小部件的实际大小,即使是size_hint也是如此。

也许您在父布局有时间设置其子级的大小之前访问它,即在它们被实例化并添加之后但可能在下一帧之前。如果是这种情况,你可以粗略地将Clock.schedule_once函数在0间隔后检查(这意味着在下一帧之后),或者更一般地说,它通常是绑定到属性并更新某些东西的kivy方式每当它发生变化时。

如果你举一个你正在尝试的例子,我可以给出一个更直接的答案。