簡體   English   中英

<Python - Kivy > GridLayout渲染單個Tile

[英]<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM