在使用Kivy语言导入类时,我遇到了分配别名的麻烦。我关注的文档是here:
从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
pieces.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:
答案 0 :(得分:1)
我不确定你想要做什么实际上是可能的,但至少这个导入语法没有那个目的并且行为正常。也就是说,#:import
语法仅适用于kv文件的python部分,例如,您可以包含类似
#:import Boo pieces.pieces.PieceA
...
...
<SomeWidget>:
Button:
on_press: some_other_widget.add_widget(Boo())
这可以达到你的预期,Boo是PieceA的标准python别名。
但是,当解析kv文件时,我不知道为类规则的名称添加别名的方法。我也不确定你为什么要或不需要(不是说这意味着没有理由!),为什么不把它们称为PieceA,PieceB等?