0

在导入 Kivy 语言中的类时,我无法分配别名。我正在关注的文档在这里

从 python 导入一些东西:

#:import name x.y.z

相当于:

from x.y import z as name

我创建了我的问题的简化版本。pieces.py位于包装件内(及其各自__init__.py的 ),pieces.kv位于我的工作文件夹中。

件/件.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 个文件,以防你想测试。

主文件

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()

画廊.kv

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

1 回答 1

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

于 2013-06-24T13:42:03.527 回答