小部件的大小取决于您检查的时间。在创建小部件但放置在布局内部时不计算大小。例如:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.layout import Layout
kv = '''
<Foo>:
on_touch_down: print(self.size)
'''
Builder.load_string(kv)
class Foo(Layout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
print (self.size)
class MyApp(App):
def build(self):
return Foo()
MyApp().run()
里面__init__()
方法值的大小仍然是(100,100)。稍后点击小部件后,它将返回适当的值。
如果你愿意,你可以控件大小结合的方法,将调整后,被称为:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.layout import Layout
class Foo(Layout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.bind(pos=self.update)
self.bind(size=self.update)
self.update()
def update(self, *args):
print(self.size)
self.canvas.clear()
with self.canvas:
pass
class MyApp(App):
def build(self):
return Foo()
MyApp().run()
首先,Foo
与默认大小值创建。然后显示它,因此适当的尺寸值被计算并分配给尺寸属性,这触发了update
方法。任何其他尺寸的更新(例如,如果您重新调整窗口)也会触发此方法。 Kivy language这是自动执行此操作并且它是推荐的方法。
最后,我不知道你想达到什么目的,但我怀疑你并不是真的需要这个值。
如果我需要构造函数中的实际大小,该怎么办?例如。里面'与self.canvas:'? – Necronomicron
@Necronomicron,答案已更新。 – Nykakin