首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何更改kivy小部件的默认值?

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

Stack Overflow用户
提问于 2018-08-04 23:43:33
回答 1查看 677关注 0票数 0

虽然这看起来是一项很好的任务,但我不知道如何在kivy中配置Widget.width.defaultvalue。

我心目中的小部件在.kv文件中的定义如下:

代码语言:javascript
复制
<Snake>:
    size: 20, 20
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

这个Snake Widget大体上就是:

代码语言:javascript
复制
class Snake(Widget):
    pass

但是,当我想在python代码中添加这样一个Snake,试图将它放在右下角时,我发现宽度缺省值是100,而不是我在.kv文件中定义的20。

代码语言:javascript
复制
class SnakeGame(Widget):

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

为了我的蛇课,我试着

代码语言:javascript
复制
super.width.defaultvalue = 20

这导致了一个错误。谁能给我一个提示,我可以在哪里改变这个默认值?

诚挚的问候!

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

代码语言:javascript
复制
class Snake(Widget):
        width = NumericProperty(20)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 00:10:33

访问Snake小部件的宽度

Python代码

实例化Snake对象,snake = Snake()

  • Set Snake对象位置,snake.pos = self.width - snake.width, self.y

  • Add

  • ()函数来验证snake的宽度和位置,print("width={0}, pos={1}".format(snake.width, snake.pos))

  • Add snake小部件/对象到根小部件。

代码片段- Python代码

代码语言:javascript
复制
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)或默认widget

Snippet - kv文件

代码语言:javascript
复制
<Snake>:
    size_hint: None, None
    size: 20, 20

Widget » default size

  • 小工具的默认大小为(100,100)。
  • 默认size_hint为(1,1)。

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

Snake - size_hint

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

代码语言:javascript
复制
<Snake>:
    size_hint: None, None
    size: 20, 20

Widget » size_hint

如果不想对宽度或高度使用size_hint,请将该值设置为None。

SnakeGame - pos_hint

FloatLayout

  • Use pos_hint={'right': 1}

替换

  1. Widget

代码段

代码语言:javascript
复制
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’、‘top’和‘center_y’将使用父高度。

有关更多参考信息,请参阅Float Layout

便笺

并非所有布局都使用pos_hint。检查有问题的布局的文档,看看它是否支持pos_hint。

pos_hint是一个包含字典的ObjectProperty。

示例

main.py

代码语言:javascript
复制
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

代码语言:javascript
复制
#: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

输出

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51687169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档