<Python - Kivy > 呈现单个 Tile 的 GridLayout
<Python - Kivy > GridLayout rendering a single Tile
我有以下 python classes:
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')))
以及以下kv语言定义:
#:kivy 1.0.9
<Map>:
size: self.parent.size
<Tile>:
size: 20, 20
这只会渲染 1 个箱子(实际上循环运行正常,所以它们可能堆叠在一起?):
如果我为一些开箱即用的小部件(如按钮)更改 Tile class:
class Map(GridLayout):
SIZE = 5
def __init__(self, **kwargs):
super(Map, self).__init__(**kwargs)
for _ in range(0, self.SIZE**2):
self.add_widget(Button(text=str(_)))
它显示正确的结果:
为了完成这项工作,我的 Tile class 缺少什么?我认为这就是问题所在,但目前我找不到它
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')))
每个 Tile 都是一个 Widget 包含 图片,但 Widget 不是布局 class 所以图片只有默认位置 (0, 0)
和 (100, 100)
.
的大小
您可以将 Tile 设为 图像,或将 Widget 替换为类似 BoxLayout 的布局(后一种选择效率较低,除非您需要额外的布局行为)。
我有以下 python classes:
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')))
以及以下kv语言定义:
#:kivy 1.0.9
<Map>:
size: self.parent.size
<Tile>:
size: 20, 20
这只会渲染 1 个箱子(实际上循环运行正常,所以它们可能堆叠在一起?):
class Map(GridLayout):
SIZE = 5
def __init__(self, **kwargs):
super(Map, self).__init__(**kwargs)
for _ in range(0, self.SIZE**2):
self.add_widget(Button(text=str(_)))
它显示正确的结果:
为了完成这项工作,我的 Tile class 缺少什么?我认为这就是问题所在,但目前我找不到它
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')))
每个 Tile 都是一个 Widget 包含 图片,但 Widget 不是布局 class 所以图片只有默认位置 (0, 0)
和 (100, 100)
.
您可以将 Tile 设为 图像,或将 Widget 替换为类似 BoxLayout 的布局(后一种选择效率较低,除非您需要额外的布局行为)。