小部件的大小取決於您檢查的時間。在創建小部件但放置在佈局內部時不計算大小。例如:
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