【问题标题】:Kivy: how to change widget size using numericproperty?Kivy:如何使用 numericproperty 更改小部件大小?
【发布时间】:2014-06-04 18:47:44
【问题描述】:

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

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

【问题讨论】:

    标签: python widget size kivy


    【解决方案1】:

    BrickGreen.brickwidth = 100

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

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

    我建议阅读有关属性的 kivy 文档并查看示例以了解如何使用它们。

    【讨论】:

    • 太好了,谢谢你的恶意。这行得通,但我现在有一个问题。球只会与小部件的一部分发生碰撞。所以当我通过 spawn_brick 函数添加它时,我将小部件长度设置为 300,但是球只会与小部件的大约 100 宽度发生碰撞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多