Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy:如何使用numericproperty更改小部件大小?_Python_Widget_Size_Kivy - Fatal编程技术网

Python Kivy:如何使用numericproperty更改小部件大小?

Python Kivy:如何使用numericproperty更改小部件大小?,python,widget,size,kivy,Python,Widget,Size,Kivy,试图使砖块小部件在每次重新启动时改变大小 py文件已被删除 class Game(FloatLayout): player = ObjectProperty(None) playbutton = ObjectProperty(None) ratebutton = ObjectProperty(None) brickg = ObjectProperty(None) ballsin = NumericProperty(0) bricklist = Li

试图使砖块小部件在每次重新启动时改变大小

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
:
大小提示:无,无
尺寸:self.brickwidth,25
画布:
颜色:
rgba:0,1,0,1
矩形:
pos:self.pos
大小:self.size
从本质上讲,0级应该有长度为100的砖块,一旦打破,它将进入1级,并应产生长度为75的砖块,但它保持在100

BrickGreen.brickwidth=100

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

您还需要在类级别声明NumericProperty,而不是在
\uuuu init\uuuu


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

太好了,谢谢您。这很有效,但我现在有个问题。球只会与小部件的一部分碰撞。因此,当我通过spawn_brick函数添加小部件时,我将小部件的长度设置为300,但是球只会与小部件的大约100宽度发生碰撞。