PR
Python+Kivy入門

AnchorLayoutの使い方: Kivyのレイアウト2【kv言語】

この記事は約5分で読めます。

KivyのレイアウトのAnchorLayoutの使い方について説明します。AnchorLayoutは上下左右、中央の決まった位置にウィジェットを配置するレイアウトウィジェットです。

AnchorLayoutとは

AnchorLayoutは上下左右、中央の決まった位置にウィジェットを配置するレイアウトウィジェットです。AnchorLayoutを単体で使用した場合、1つのウィジェットしか配置できません。複数のウィジェットを配置したい場合は、他のレイアウトと併用する、もしくは他のレイアウトを選択した方が良いかもしれません。

AnchorLayoutでウィジェットの配置をする

ウィジェットの位置を設定するにはanchor_xプロパティとanchor_yプロパティを使用します。xは水平軸yは垂直軸になります。

  • anchor_x: [ ‘left’, ‘center‘, ‘right‘ ]で水平の位置を設定します。デフォルトはcenterです。
  • anchor_y: [ ‘top‘, ‘center‘, ‘bottom‘ ]で垂直の位置を設定します。デフォルトはcenterです。

下図はanchor_xanchor_yの位置を示します。

Kivy AnchorLayoutの位置設定

AnchorLayoutのサンプルコードをみてみましょう。

anchorlayout1.py

from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout

class RootWidget(AnchorLayout):
    pass

class Anchorlayout1(App):
    def build(self):
        return RootWidget()

if __name__ == '__main__':
    Anchorlayout1().run()

anchorlayout1.kv

<RootWidget>:
    anchor_x: 'center'
    anchor_y: 'top'
    padding: 100 # 内側の余白を設定する。

    # 背景色の設定
    canvas.before:
        Color:
            rgba: 229/255, 234/255, 230/255, 1 # RGBA
        Rectangle:
            size: self.size
            pos: self.pos

    Button: # Button2と重なって表示される。
        text: 'Button 1'
        size_hint: 0.3, 0.2
    Button:
        text: 'Button 2'
        size_hint: 0.3, 0.2

上記のコードではButton1は、Button2と重なって表示されるので隠れてしまいます。pospos_hintのウィジェットの位置を設定するプロパティは使用できないので、複数のウィジェットを使いたい場合は他のレイアウトを入れ子にして使用します。これについてはこの記事の後半で解説します。

KivyのAnchorLayoutアプリのスクショ

AnchorLayoutの設定

AnchorLayoutには内側の余白設定(padding)や、背景色を設定する事ができます。

内側の余白(padding)を設定する

AnchorLayoutの内側の余白を設定するにはpaddingプロパティを使用します。

Kivyレイアウトのpadding

paddingの詳細についてはBoxLayoutの記事をご覧ください。

背景色を設定する

AnchoLayoutに背景色を設定するプロパティは存在しないので、canvasを使用します。背景色の設定方法についての詳細は下記の記事をご覧ください。

AnchorLayoutで複数のウィジェットを配置するには

AnchorLayoutで複数のウィジェットを配置するには他のレイアウトを入れ子にします。

  1. 自由な位置にしたい場合: FloatLayoutRelativeLayout
  2. 自動的に整列させたい場合: BoxLayoutGridLayout

AnchorLayoutBoxLayoutを入れ子にして複数のウィジェットを配置するサンプルコードを以下に示します。

anchorlayout2.py

from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout

class RootWidget(AnchorLayout):
    pass

class Anchorlayout2(App):
    def build(self):
        return RootWidget()

if __name__ == '__main__':
    Anchorlayout2().run()

anchorlayout2.kv

<RootWidget>:
    anchor_x: 'center'
    anchor_y: 'center'
    padding: 20
    
    BoxLayout:
        spacing: 20
        Button:
            text: 'Button 1'
            size_hint: 0.3, 0.2
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        Button:
            text: 'Button 2'
            size_hint: 0.3, 0.2
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
            

この例ではpos_hintを使用して画面の中心にウィジェットを配置しています。

pos_hintの詳細については下記の記事をご覧ください

ウィジェットのサイズを設定する

ウィジェットのサイズを設定するにはsize_hintプロパティを使用します。size_hintの詳細は下記のページをご覧ください。

Comment

タイトルとURLをコピーしました