些細なことのように思えますが、 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をインポートすると、インポートが長くなる可能性があります。
このタイプのインポートが_ない_理由を参照しています-すべてのウィジェットが__init__.py
によってインポートされる場合、ウィジェットをインポートするたびに、すべてのファイルがロードされるため、パフォーマンスにわずかなペナルティが課せられます。 ただし、このペナルティは非常に小さいものですが、それが重要かどうかはわかりません(ただし、Androidでは、デスクトップでは無視できる場合でも、これらの問題が関係する可能性があります)。
最も参考になるコメント
Factoryは、必要に応じて簡単にインポートできることを言及する価値があります。