如何在Kivy语言导入中使用别名?

时间:2013-06-24 11:48:53

标签: kivy

在使用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:

1 个答案:

答案 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等?