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: