簡體   English   中英

如何在Kivy中獲取小部件/布局的實際大小?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM