[英]How can I get widget's/layout's actual size in Kivy?
我在BoxLayout中有這個布局(以及其他元素):
<PlayField>:
size_hint_x: None
width: self.height
canvas.before:
Color:
rgb: .9, .9, .9
Rectangle:
pos: self.pos
size: self.size
main.py:
class PlayField(Layout): # Or should it be Widget?
pass
我如何獲得它的實際尺寸? print(self.size)
顯示默認大小(100、100),盡管這不是事實。
小部件的大小取決於您檢查的時間。 創建小部件時不會計算大小,而是將其放置在布局中時會計算大小。 例如:
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
。 然后顯示出來,因此將計算適當的大小值並將其分配給size屬性,從而觸發update
方法。 其他任何大小更新(例如,如果您重新縮放窗口)也將觸發此方法。 Kivy語言會自動執行此操作,因此建議使用此方法。
最后,我不知道您要達到什么目標,但我懷疑您真的不是立即需要此值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.