[英]<Python - Kivy > GridLayout rendering a single Tile
我有以下python類:
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個箱子(實際上循環運行正常,所以也許它們堆疊了?): 如果我為某些現成的Widget(例如Button)更改Tile類,則:
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 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是一個包含 Image的Widget,但Widget不是布局類,因此Image的默認pos為(0, 0)
且大小為(100, 100)
。
您可以改為使Tile 為 Image,或將Widget替換為BoxLayout之類的布局(除非您需要額外的布局行為,否則后一種選擇的效率較低)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.