这看起来几乎是微不足道的,但是是否有可能在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
也许这就是 init 的工作方式? 导入 init Factory 并为每个小部件返回Factory.<widget>
。 还是太苛刻了?
可能可以使用导入钩子方法,尽管这有可能破坏某些 IDE 的代码检测的缺点。
不这样做的原因是完全表现吗? 如果是这样,则有可能(虽然有点不整洁)有一个 kivy.uix.everything 模块提供所有导入。
不是真正的性能,只是减少编写。 有时它让我想起 java(例如多次写相同的词)。 如果单词很短,看起来并不像,但是当您导入例如 screenmanager 时,导入可能会很长。
我指的是 _not_ 有这种类型的导入的原因 - 如果所有小部件都是由__init__.py
导入的,那么每当您导入任何小部件时,它都会施加轻微的性能损失,因为它们的所有文件都已加载。 虽然这个惩罚会很小,但我不知道它是否重要(尽管在 Android 上这些东西可能是相关的,即使在桌面上可以忽略不计)。
最有用的评论
值得一提的是,如果您需要,Factory 可以轻松导入;