虽然这看起来是一项很好的任务,但我不知道如何在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)
发布于 2018-08-05 00:10:33
访问Snake小部件的宽度
Python代码
实例化Snake对象,snake = Snake()
snake.pos = self.width - snake.width, self.y
print("width={0}, pos={1}".format(snake.width, snake.pos))
代码片段- 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文件
size_hint: None, None
以覆盖小部件的默认size: (100, 100)
或默认widgetSnippet - kv文件
<Snake>:
size_hint: None, None
size: 20, 20
有关详细信息,请参阅代码片段和示例。
Snake - size_hint
添加size_hint: None, None
以覆盖小部件的默认size: (100, 100)
或size_hint: (1, 1)
。
<Snake>:
size_hint: None, None
size: 20, 20
如果不想对宽度或高度使用
size_hint
,请将该值设置为None。
SnakeGame - pos_hint
用FloatLayout
pos_hint={'right': 1}
替换
Widget
代码段
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’、‘top’和‘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
输出
https://stackoverflow.com/questions/51687169
复制相似问题