<python - =“”kivy =“”> GridLayout渲染单个Tile

时间:2016-08-07 14:50:55

标签: python kivy kivy-language

我有以下python类:

stat1

以下kv语言定义:

import os

from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image

from crawler.settings import ASSETS_DIR


class Map(GridLayout):
    SIZE = 5

    def __init__(self, **kwargs):
        super(Map, self).__init__(**kwargs)
        for _ in range(0, self.SIZE**2):
            self.add_widget(Tile())


class Tile(Widget):
    def __init__(self, **kwargs):
        super(Tile, self).__init__(**kwargs)
        self.add_widget(Image(source=os.path.join(ASSETS_DIR, 'images/chest.gif')))

这只能渲染1个胸部(实际上循环运行正常,所以也许他们会堆叠?): enter image description here 如果我改变一些开箱即用的小部件的Tile类,如Button:

#:kivy 1.0.9

<Map>:
    size: self.parent.size

<Tile>:
    size: 20, 20

显示正确的结果: enter image description here

我的Tile课程中缺少什么让这项工作成功?我认为问题出在哪里,但到目前为止我还无法找到它

1 个答案:

答案 0 :(得分:2)

每个Tile都是一个包含图像的小部件,但小部件不是布局类,因此图像的默认位置为class Tile(Widget): def __init__(self, **kwargs): super(Tile, self).__init__(**kwargs) self.add_widget(Image(source=os.path.join(ASSETS_DIR, 'images/chest.gif'))) ,大小为(0, 0)

你可以改为使Tile 成为图像,或用BoxLayout这样的布局替换Widget(除非你需要额外的布局行为,否则后一种选择效率会降低)。