0

Kivy 言語でクラスをインポートするときにエイリアス名を割り当てるのに問題があります。私がフォローしているドキュメントはこちらです

Python から何かをインポートするには:

#:import name x.y.z

以下と同等です。

from x.y import z as name

問題の縮小版を作成しました。pieces.pyはパッケージの一部 (それぞれ__init__.pyの )内にありpieces.kv、作業フォルダー内にあります。

ピース/pieces.py

from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout

class PieceA(Button):
    pass
class PieceB(Button):
    pass
class PieceC(GridLayout):
    pass

ピース.kv

#:import Boo pieces.pieces.PieceA
#:import Foo pieces.pieces.PieceB
#:import Too pieces.pieces.PieceC
<Boo>:
    text: "A"
<Foo>:
    text: "B"
<Too>:
    rows: 2
    Boo:
    Foo:

インポートはドキュメントに記載されているとおりですが、エイリアス Boo、Foo、Too は認識されていません。クラスの元の名前を使用し、エイリアス名を使用しない場合に予期せず機能する、これの他の多くのバージョンもあります。

#:import Boo pieces.pieces
<PieceA>:
    text: "A"
<PieceB>:
    text: "B"
<PieceC>:
    rows: 2
    PieceA:
    PieceB:

代用#:import Boo pieces.piecesしても#:import Boo pieces.pieces.PieceA。クラスの元の名前を使用している限り動作し続けますが、エイリアス名は使用できません。Kivy言語でクラスをインポートするときにエイリアス名を使用するにはどうすればよいですか?


テストしたい場合に備えて、他の 2 つのファイルもここに追加しました。

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout

Builder.load_file('pieces.kv')

class Gallery(GridLayout):
    pass

class GalleryApp(App):
    def build(self):
        return Gallery()

GalleryApp().run()

gallery.kv

<Gallery>:
    cols: 3
    PieceA:
    PieceB:
    PieceC:
4

1 に答える 1