如何更改kivy小部件的默认值?

时间:2018-08-04 15:43:33

标签: python widget kivy

尽管这似乎是一项艰巨的任务,但我不知道如何在kivy中配置Widget.width.defaultvalue。

.kv文件中定义的小部件定义如下:

<Snake>:
    size: 20, 20
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

此Snake Widget原则上只不过是:

class Snake(Widget):
    pass

但是,当我想在Python代码中添加这样的Snake时,尝试将其放置在右下角,我发现宽度默认值是100,而不是我在.kv文件中定义的20。

class SnakeGame(Widget):

def __init__(self):
    super().__init__()
    self.add_widget(Snake(pos=(self.width - Snake.width.defaultvalue, self.y)))

在我的蛇课上,我尝试了

super.width.defaultvalue = 20

这导致了错误。有人可以给我一个提示,在哪里可以更改此默认值?

最诚挚的问候!

编辑: 我的问题的实际答案几乎是愚蠢的:

class Snake(Widget):
        width = NumericProperty(20)

1 个答案:

答案 0 :(得分:1)

访问Snake小部件的宽度

Python代码

  1. 实例化Snake对象snake = Snake()
  2. 设置Snake对象位置snake.pos = self.width - snake.width, self.y
  3. 添加print()函数以验证蛇的宽度和位置print("width={0}, pos={1}".format(snake.width, snake.pos))
  4. 将蛇部件/对象添加到根部件。

代码段-Python代码

class SnakeGame(FloatLayout):

    def __init__(self, **kwargs):
        super(SnakeGame, self).__init__(**kwargs)
        snake = Snake()
        snake.pos = self.width - snake.width, self.y
        print("width={0}, pos={1}".format(snake.width, snake.pos))
        self.add_widget(snake)

kv文件

  1. 添加size_hint: None, None以覆盖小部件的默认size: (100, 100)或默认size_hint: (1, 1)

代码段-kv文件

<Snake>:
    size_hint: None, None
    size: 20, 20

Widget » default size

  
      
  • 小部件的默认大小为(100,100)。
  •   
  • 默认的size_hint为(1,1)。
  •   

有关详细信息,请参见代码段和示例。

蛇-size_hint

添加size_hint: None, None会覆盖小部件的默认size: (100, 100)size_hint: (1, 1)

<Snake>:
    size_hint: None, None
    size: 20, 20

Widget » size_hint

  

如果您不想使用size_hint作为宽度或高度,   将该值设置为“无”。

SnakeGame-pos_hint

  1. Widget替换为FloatLayout
  2. 使用pos_hint={'right': 1}

摘要

class SnakeGame(FloatLayout):

    def __init__(self, **kwargs):
        super(SnakeGame, self).__init__(**kwargs)
        self.add_widget(Snake(pos_hint={'right': 1}))

Widget » pos_hint

pos_hint
     

位置提示。此属性允许您设置   父布局内的小部件,以百分比表示(类似于size_hint)。

     

例如,如果要将小部件的顶部设置为90%   父布局的高度,您可以编写:

widget = Widget(pos_hint={'top': 0.9})
     

“ x”,“ right”和“ center_x”键将使用父级宽度。的   键“ y”,“顶部”和“ center_y”将使用父级高度。

     

请参阅Float Layout,以获取更多参考。

     

注意

     并非所有布局都使用

pos_hint。检查文档   有问题的布局,以查看其是否支持pos_hint。

     

pos_hint是一个包含字典的ObjectProperty。

示例

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout


class Snake(Widget):
    pass


class SnakeGame(FloatLayout):

    def __init__(self, **kwargs):
        super(SnakeGame, self).__init__(**kwargs)
        self.add_widget(Snake(pos_hint={'right': 1}))


class TestApp(App):
    title = "Kivy - Snake Game"

    def build(self):
        return SnakeGame()


if __name__ == '__main__':
    TestApp().run()

test.kv

#:kivy 1.11.0

<Snake>:
    size_hint: None, None
    size: 20, 20
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

输出

Img01