我有以下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个胸部(实际上循环运行正常,所以也许他们会堆叠?): 如果我改变一些开箱即用的小部件的Tile类,如Button:
#:kivy 1.0.9
<Map>:
size: self.parent.size
<Tile>:
size: 20, 20
我的Tile课程中缺少什么让这项工作成功?我认为问题出在哪里,但到目前为止我还无法找到它
答案 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(除非你需要额外的布局行为,否则后一种选择效率会降低)。