我一直在使用大小提示来调整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 块中某些布局的绝对大小。与上面的简单代码类似。我可以根据大小提示和窗口大小来计算它,但是当我开始嵌套多层布局时,它会变得复杂,这些布局可能包括也可能不包括窗口小部件之间的填充和间距。再次感谢您的帮助。
答案 0 :(得分:0)
size属性确实包含窗口小部件的实际大小,即使是size_hint也是如此。
也许您在父布局有时间设置其子级的大小之前访问它,即在它们被实例化并添加之后但可能在下一帧之前。如果是这种情况,你可以粗略地将Clock.schedule_once函数在0
间隔后检查(这意味着在下一帧之后),或者更一般地说,它通常是绑定到属性并更新某些东西的kivy方式每当它发生变化时。
如果你举一个你正在尝试的例子,我可以给出一个更直接的答案。