重叠两个GridLayout

时间:2018-08-10 19:32:37

标签: python-3.x kivy

我正在使用Kivy / Python制作“黑白棋黑白棋游戏”。 基本上,我有一个GridLayout,它代表开发板本身的“图形布局”。它充满了“平铺”实例(它们只是使用“ ButtonBehaviour”的自定义标签,当然还有“标签”),因此我可以单击它们并执行某些操作。这可以正常工作。

main.py

class GameScreen(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.create_grid()

    def create_grid(self):
        for row in range(8):
            for col in range(8):
                tile = Tile(row, col)
                self.ids.board.add_widget(tile)


class Tile(ButtonBehavior, Label):
    def __init__(self, row, col, **kwargs):
        self.row, self.col = row, col
        super().__init__(**kwargs)

        with self.canvas.before:
            self.rect = Rectangle(size=self.size, pos=self.pos, source='images/tile_3.png')

        self.bind(pos=self.update_rect, size=self.update_rect)

    def __repr__(self):
        return 'Tile object in pos=({}, {})>'.format(self.row, self.col)

    def update_rect(self, instance, value):
        self.rect.pos = self.pos
        self.rect.size = self.size

    def on_press(self, value=None):
        print(self)

othello.kv

<Grid@GridLayout>:
    rows: 8
    cols: 8
    spacing: (2, 2)

    size_hint: None, None
    size: dp(400), dp(400)


<GameScreen>:
    BoxLayout:
        id: box_layout
        orientation: 'vertical'

        AnchorLayout:
            Grid:
                id: board
                pos_hint: {'x': (box_layout.width - self.width) / (2 * box_layout.width)}

输出

image

我想做的是使另一个GridLayout覆盖前一个。它应该具有彼此相同的大小,但是在这种情况下,它将代表游戏中使用的每块。我有3张图像,其中2张基本上是一块透明背景,这样我仍然可以看到下面的图块,而另一张图像是完全透明的,以便我可以看到整个图块(表示那里没有一块)。不幸的是,我不知道如何正确地使这两个网格重叠,或者是否还有另一种更好的方法。我想提出任何建议。谢谢。

1 个答案:

答案 0 :(得分:0)

这就是我的解决方法:

<GameScreen>:
    BoxLayout:
        orientation: 'vertical'

        AnchorLayout:
            id: anchor_layout

            FloatLayout:
                Grid:
                    id: board
                    pos_hint: {'x': (anchor_layout.width - self.width) / (2 * anchor_layout.width), 'y': (anchor_layout.height - self.height) / (2 * anchor_layout.height)}

                Grid:
                    id: pieces
                    pos_hint: {'x': (anchor_layout.width - self.width) / (2 * anchor_layout.width), 'y': (anchor_layout.height - self.height) / (2 * anchor_layout.height)}