尽管这似乎是一项艰巨的任务,但我不知道如何在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)
答案 0 :(得分:1)
snake = Snake()
snake.pos = self.width - snake.width, self.y
print("width={0}, pos={1}".format(snake.width, snake.pos))
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)
size_hint: None, None
以覆盖小部件的默认size: (100, 100)
或默认size_hint: (1, 1)
。<Snake>:
size_hint: None, None
size: 20, 20
- 小部件的默认大小为(100,100)。
- 默认的size_hint为(1,1)。
有关详细信息,请参见代码段和示例。
添加size_hint: None, None
会覆盖小部件的默认size: (100, 100)
或size_hint: (1, 1)
。
<Snake>:
size_hint: None, None
size: 20, 20
如果您不想使用
size_hint
作为宽度或高度, 将该值设置为“无”。
Widget
替换为FloatLayout
pos_hint={'right': 1}
class SnakeGame(FloatLayout):
def __init__(self, **kwargs):
super(SnakeGame, self).__init__(**kwargs)
self.add_widget(Snake(pos_hint={'right': 1}))
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。
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()
#: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