Kivy:如何使用numericproperty更改widget的大小?

2024-06-28 10:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使一个砖块小部件在每次重生时改变大小。在

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档案上有

^{pr2}$

基本上,等级0应该有长度为100的砖块,一旦它断裂,它将进入1级,并且应该产生长度为75的砖块,但它会保持在100


Tags: selfnoneinitdefargskwargsheightbrick
1条回答
网友
1楼 · 发布于 2024-06-28 10:50:35

BrickGreen.brickwidth = 100

这将用数字100替换类级别的NumericProperty。您需要为对象的实例设置brickwidth的值,而不是类本身。在这种情况下,您可以(例如)将您想要的宽度传递给您的spawn_brick方法,并在实例化BrickGreen时使用它。在

您还需要在类级别声明NumericProperty,而不是在__init__内部。在

我建议您阅读kivy关于属性的文档,并通过示例了解如何使用这些属性。在

相关问题 更多 >