Python 如何在使用大小提示时获得Kivy布局的绝对大小
我一直在使用大小提示来调整Kivy中许多布局的大小。但是,无论何时使用大小提示,我都无法从size属性获取布局的绝对大小(像素大小)。我发现,在将size\u hint设置为None之后,您只能从布局的size属性获取绝对大小。如何获得绝对大小并同时使用大小提示?有什么方法或东西我可以调用吗 我在下面添加了一个简单的示例Python 如何在使用大小提示时获得Kivy布局的绝对大小,python,layout,size,kivy,Python,Layout,Size,Kivy,我一直在使用大小提示来调整Kivy中许多布局的大小。但是,无论何时使用大小提示,我都无法从size属性获取布局的绝对大小(像素大小)。我发现,在将size\u hint设置为None之后,您只能从布局的size属性获取绝对大小。如何获得绝对大小并同时使用大小提示?有什么方法或东西我可以调用吗 我在下面添加了一个简单的示例 from kivy.lang import Builder from kivy.lang import Builder from kivy.app import App fro
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()
我应该得到的两个尺寸列表是布局1的[300,60]和布局2的[300,240]。更改窗口大小后,我需要init块中某些布局的绝对大小。类似于上面的简单代码。我可以根据大小提示和窗口大小来计算它,但是当我开始嵌套许多布局层时,它会变得复杂,这些布局层可能包括也可能不包括小部件之间的填充和间距。再次感谢您的帮助。size属性确实包含小部件的实际大小,即使有大小提示 也许您是在父布局有时间设置其子布局的大小之前访问它,即在实例化和添加它们之后,但可能在下一帧之前。如果是这种情况,您可以粗略地将Clock.schedule_函数安排一次,以便在
0
间隔后(这意味着在下一帧之后)进行检查,或者更一般地说,它通常是绑定到属性并在属性发生更改时进行更新的一种简单方法
如果你举一个你正在尝试的例子,我可以给出一个更直接的答案
[100, 100]
[1, 0.2]
[100, 100]
[1, 0.8]
[100, 100]
[1, 0.2]
[100, 100]
[1, 0.8]