短い答え:
ありませんあなたは画面を定義するときに、スーパー使用する必要はありません。はい、あなたはいつも__init__
にスーパーを持っていなければなりません(__init__
を使用する場合)。
長い答えは:
それはスクリーンに固有の何もありません。ドキュメントの例では、__init__
を呼び出していないので、何もパラメータを渡さないので、super
は必要ありません。 __init__
コールを使用してKivyスクリーンを定義する必要はありません。 SOの質問から、__init__
を実行している場合は、オブジェクト階層の上に** kwargsを渡し、通常は親クラスの初期化を実行する__init__
を再定義します。 super
は、** kwargsを渡して、親クラスへの明示的な呼び出しなしで親__init__
を実行できるようにするために使用されます。Screen
はRelativeLayout
から継承され、それ自体はFloatLayout
から継承されます。スーパーコールがなければ、親クラスをオーバーライドします。
ご使用の場合を除き、__init__
に電話する必要はありません。あなたは、レイアウト、コンテンツ、プロパティを設定したい場合は
class LoginScreen(Screen):
def login(self):
self.parent.current = 'ParameterScreen'
あなたは、などを__init__
を使用します。ここではありません__init__
コール(レイアウトが.kvファイルに設定されている)で、私のアプリケーションの1からScreen
です.kvファイルでこれらのものを定義せずに作成したクラスをインスタンス化した瞬間の画面のこれを行うには、上記のようにスーパーが必要になります。可能であれば、.kvファイルを使用するのは、kivyでも良い方法です。
この例では、self.callerを持つBottomBarの親にアクセスできるようにしたいと思います。作成する際に** kwargsとして渡し、バーがインスタンス化されるとすぐにこれを定義します。スーパーコールが必要な__init__
に定義する必要があります。
class BottomBar(ActionBar):
titletext = StringProperty('')
def __init__(self,**kwargs):
self.caller = kwargs.get('caller')
super(BottomBar,self).__init__(**kwargs)
def change_title(self,newtitle):
self.titletext = newtitle
私は、この例のように、スーパーずに継承する場合には、どういう意味:https://github.com/kivy/kivy/wiki/Data-driven-variables-with-kivy-properties、私は変更することができます実行時にルートウィジェットで生成される可能性のあるアクセス権変数(例えば、パイプオブジェクトから取得された変数)? – Moritz
@Moritz __init__を使用している場合は、親クラスの__init__などを呼び出すデフォルトの初期化を上書きします。スーパーコール、または明示的に名前が付けられたBaseClass .__ init __()が必要です。 superでは、親クラスにパラメータを渡すことができます。 – Daniel