Kivyで背景色と背景画像を設定する方法

2019年12月22日

みなさまおはこんばんにちは、せなです

今回はKivyを使ったときの背景色の設定方法と背景画像の設定方法について説明したいと思います

背景色の設定

Kivyではwidgetに対して描画を行うときには「Graphicsパッケージ」を基本的に使用します
Graphicsパッケージは簡単に説明すると、widgetに描画するときに活用できる関数群をサポートしているパッケージです

背景色を変更するときには「Color」を使用します
以下のコードをご覧ください

Kv Languageを使用

from kivy.app import App

class MainApp(App):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)

if __name__ == '__main__':
    MainApp().run()
FloatLayout:
    canvas.before:
        Color:
            rgba: 0, 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

Pythonのみ

from kivy.app import App
from kivy.graphics import Color, Rectangle
from kivy.uix.floatlayout import FloatLayout


class RootWidget(FloatLayout):

    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)


class MainApp(App):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)
        self.root = root = RootWidget()
        root.bind(size=self._update_rect, pos=self._update_rect)

        with root.canvas:
            Color(0, 1, 1, 1)
            self.rect = Rectangle(size=root.size, pos=root.pos)

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


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

上記のコードはどちらを実行しても同じ結果を得ることができます

背景画像の設定

背景画像の設定には「Rectangle」を使用します
「Rectangle」は基本的に位置を設定(取得)するために使用されますが、背景画像を設定する場合にも使用することができます

以下のコードをご覧ください

Kv Languageを使用

FloatLayout:
    canvas:
        Rectangle:
            source: "back.jpg"
            pos: self.pos
            size: self.size
背景色の設定と同じ

Pythonのみ

from kivy.app import App
from kivy.graphics import Color, Rectangle
from kivy.uix.floatlayout import FloatLayout


class RootWidget(FloatLayout):

    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)


class MainApp(App):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)
        self.root = root = RootWidget()
        root.bind(size=self._update_rect, pos=self._update_rect)

        with root.canvas:
            Color(0, 1, 1, 1)
            self.rect = Rectangle(source="back.jpg", size=root.size, pos=root.pos)

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


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

最後に

ザックリとメモ書き程度に書いていますので、後日加筆修正するかもしれません

それにしてもKivyは難しいですね…
調べたりしながら、勉強してますがなかなか時間がかかりそうです(^^;

ここまで読んで下さり、ありがとうございました
ではでは~