【发布时间】:2015-06-21 20:56:05
【问题描述】:
我一直在使用尺寸提示来调整我在 Kivy 中的许多布局。但是,无论何时使用大小提示,我都无法从 size 属性中获取布局的绝对大小(像素大小)。我发现在将 size_hint 设置为 None 后,您只能从布局的 size 属性中获取绝对大小。如何同时获得绝对尺寸和使用尺寸提示?有什么方法或我可以调用的东西吗?
我在下面添加了一个简单的例子。
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()
打印出来:
[100, 100]
[1, 0.2]
[100, 100]
[1, 0.8]
[100, 100]
[1, 0.2]
[100, 100]
[1, 0.8]
我应该得到的两个尺寸列表是 layout1 的 [300, 60] 和 layout2 的 [300, 240]。更改窗口大小后,我需要 init 块中某些布局的绝对大小。类似于上面的简单代码。我可以根据大小提示和窗口大小来计算它,但是当我开始嵌套可能包含或不包含小部件之间的填充和间距的许多布局层时,它会变得复杂。再次感谢您的帮助。
【问题讨论】: