LoginSignup
7
5

More than 5 years have passed since last update.

Kivyのrootについて

Posted at

Kivyで良く使うapp, rootについて

Kivyでは良くappやrootといった変数を使用します。

  • app
    • Appのインスタンスを指します
    • 対象となるインスタンスは基本ひとつです
  • root
    • 対象の根っこになっているWidgetのインスタンスを指します
    • 下の例ではImageのrootはLargeImageです

例えば、下みたいな感じで使います。

main.kv
<LargeImage>:
    on_touch_down: app.changeScene()                   #Widget がタッチされたらMainAppのchangeeSceneを呼ぶ
    Image:
        allow_stretch: True
        source: root.path  
main.py
class LargeImage(Widget):
    def __init__(self, path):
        self.path = path
        super(LargeImage, self).__init__()

class MainApp(App):
    def build(self):
        self.root = LargeImage()
        return self.root

    def changeScene(self, scene, opt = None):
        pass

rootってどこのどいつよ?

例えば下のファイルが有るとして、
上のImageのrootはLargeImage、下のImageのrootはSmallImageとなります。

main.kv
<LargeImage>:
    Image:
        source: root.path  

<SmallImage>:
    Image:
        source: root.path  

ここで、pythonファイル側で下のコードを実行したとします。

main.py
l_img = LargetImage()
l_img.add_widget(SmallImage())         #LargeImageにSmallImageを追加する

この場合、SmallImage側ImageのrootはSmallImageのままです。
LargeImageの下に追加してもrootはLargeImageに変わりません。

SmallImage側からLargeImageにアクセスしたい場合は、
rootでは無くroot.parentを使います。

逆にLargeImage側からSmallImageにアクセスする場合は
root.children[0]でアクセスできます。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5