Kivy: 使用“from kivy.uix import Button...”使 uix 小部件可访问

创建于 2016-04-25  ·  6评论  ·  资料来源: kivy/kivy

这看起来几乎是微不足道的,但是是否有可能在kivy/uix/__init__.py模块中访问一些更常用/基本的小部件?

这意味着不需要执行以下操作:

from kivy.uix.button import Button
from kivy.uix.label import Label
...
from kivy.uix.scatter import Scatter

您只需要执行以下操作:

from kivy.uix import Label, Button, ... , Scatter

这个请求的原因主要是为了帮助整理一下导入,这意味着当想要导入 30 个不同的小部件时,没有必要编写 30 行几乎相同的行。

据我所知,您只需要将所需的类导入kivy/uix/__init__.py模块并调整__all__变量,如下所示:

# kivy/uix/__init__.py

from kivy.uix.button import Button
from kivy.uix.label import Label
...
from kivy.uix.scatter import Scatter

__all__ = ['Button', 'Label', ..., 'Scatter']

最有用的评论

值得一提的是,如果您需要,Factory 可以轻松导入;

from kivy.factory import Factory

lbl = Factory.Label(text="Hello World")

class MyScatter(Factory.Scatter):
    pass

所有6条评论

导入语法会很好,但不需要所有其他小部件都存在。

https://github.com/kivy/kivy/issues/3583 的副本

值得一提的是,如果您需要,Factory 可以轻松导入;

from kivy.factory import Factory

lbl = Factory.Label(text="Hello World")

class MyScatter(Factory.Scatter):
    pass

也许这就是 init 的工作方式? 导入 init Factory 并为每个小部件返回Factory.<widget> 。 还是太苛刻了?

可能可以使用导入钩子方法,尽管这有可能破坏某些 IDE 的代码检测的缺点。

不这样做的原因是完全表现吗? 如果是这样,则有可能(虽然有点不整洁)有一个 kivy.uix.everything 模块提供所有导入。

不是真正的性能,只是减少编写。 有时它让我想起 java(例如多次写相同的词)。 如果单词很短,看起来并不像,但是当您导入例如 screenmanager 时,导入可能会很长。

我指的是 _not_ 有这种类型的导入的原因 - 如果所有小部件都是由__init__.py导入的,那么每当您导入任何小部件时,它都会施加轻微的性能损失,因为它们的所有文件都已加载。 虽然这个惩罚会很小,但我不知道它是否重要(尽管在 Android 上这些东西可能是相关的,即使在桌面上可以忽略不计)。

此页面是否有帮助?
0 / 5 - 0 等级