簡體   English   中英

Kivy:如何使用數字屬性更改窗口小部件大小?

[英]Kivy: how to change widget size using numericproperty?

嘗試使磚小部件每次重生時都更改其大小。

py文件有

class Game(FloatLayout):
    player = ObjectProperty(None)
    playbutton = ObjectProperty(None)
    ratebutton = ObjectProperty(None)
    brickg = ObjectProperty(None)
    ballsin = NumericProperty(0)
    bricklist = ListProperty([])
    score = NumericProperty(0)
    switch = NumericProperty(0)
    level = NumericProperty(0)

     def __init__(self, *args, **kwargs):
        super(Game, self).__init__(*args, **kwargs)
        Clock.schedule_interval(self.update, 1./60)

    def spawn_brick(self, *args):
        b2 = BrickGreen(x=randint(50, self.width - 50), \
        y=randint(self.height - self.height / 4, self.height - (self.height/13)))
        self.bricklist.append(b2)
        self.add_widget(b2)

    def check_brick_spawn(self, *args):

        if len(self.bricklist) == 0:
            if self.level == 0:
                BrickGreen.brickwidth = 100
                self.spawn_brick()
            elif self.level == 1:
                BrickGreen.brickwidth = 75
                self.spawn_brick()
            else:
                BrickGreen.brickwidth = 50
                self.spawn_brick()

class BrickGreen(Widget):
    def __init__(self, **kwargs):
        super(BrickGreen, self).__init__(**kwargs)

        brickwidth = NumericProperty(0)

並且kv文件具有

<BrickGreen>:
    size_hint: None, None
    size: self.brickwidth, 25
    canvas:
        Color:
            rgba: 0, 1, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

從本質上講,級別0應該具有長度為100的磚塊,一旦斷開,它就會到達級別1,並且應該生成長度為75的磚塊,但是它保持在100

BrickGreen.brickwidth = 100

這將用數字100替換類級別的NumericProperty。您需要為對象的實例而不是類本身的實例設置brickwidth的值。 在這種情況下,您可以(例如)將所需的寬度傳遞給spawn_brick方法,並在實例化BrickGreen時使用它。

您還需要在類級別而不是__init__內聲明NumericProperty。

我建議閱讀有關屬性的kivy文檔,並仔細閱讀示例以了解應如何使用這些屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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