基维屏幕。我必须用超级初始化吗?
kivy screens. Do I have to initialize with super?
来自docs:
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
从这个:
class WelcomeScreen(Screen):
def __init__(self, **kwargs):
super(Screen,self).__init__(**kwargs)
什么情况下需要用super
初始化屏幕,为什么?
简答:
不,您不必在定义屏幕时使用 super。是的,你总是必须 __init__
与超级(如果你使用 __init__
)。
更长的答案:
这不是屏幕独有的。在文档示例中,您没有调用 __init__
并传递任何参数,因此不需要 super
。您不需要调用 __init__
来定义 Kivy 屏幕。从 SO 问题来看,如果你 运行ning __init__
你正在传递 **kwargs 对象层次结构并且还重新定义 __init__
通常 运行父级初始化 class。 super
用于允许您传递 **kwargs 和 运行 父 __init__
而无需显式调用父 class,在这种情况下,Screen
继承自 RelativeLayout
,它本身继承自 FloatLayout
;如果没有 super 调用,您将覆盖父级 class.
您不需要调用 __init__
除非您需要它。这是来自我的一个应用程序的 Screen
,没有 __init__
调用(布局在 .kv 文件中设置):
class LoginScreen(Screen):
def login(self):
self.parent.current = 'ParameterScreen'
如果你想在实例化你创建的 class 时设置屏幕的布局、内容、属性等,你将使用 __init__
而没有定义这些东西.kv 文件;为此,您还需要 super 如上所述。在 kivy 中,尽可能使用 .kv 文件是一种很好的做法。
在这个例子中,我希望能够使用 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
来自docs:
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
从这个
class WelcomeScreen(Screen):
def __init__(self, **kwargs):
super(Screen,self).__init__(**kwargs)
什么情况下需要用super
初始化屏幕,为什么?
简答:
不,您不必在定义屏幕时使用 super。是的,你总是必须 __init__
与超级(如果你使用 __init__
)。
更长的答案:
这不是屏幕独有的。在文档示例中,您没有调用 __init__
并传递任何参数,因此不需要 super
。您不需要调用 __init__
来定义 Kivy 屏幕。从 SO 问题来看,如果你 运行ning __init__
你正在传递 **kwargs 对象层次结构并且还重新定义 __init__
通常 运行父级初始化 class。 super
用于允许您传递 **kwargs 和 运行 父 __init__
而无需显式调用父 class,在这种情况下,Screen
继承自 RelativeLayout
,它本身继承自 FloatLayout
;如果没有 super 调用,您将覆盖父级 class.
您不需要调用 __init__
除非您需要它。这是来自我的一个应用程序的 Screen
,没有 __init__
调用(布局在 .kv 文件中设置):
class LoginScreen(Screen):
def login(self):
self.parent.current = 'ParameterScreen'
如果你想在实例化你创建的 class 时设置屏幕的布局、内容、属性等,你将使用 __init__
而没有定义这些东西.kv 文件;为此,您还需要 super 如上所述。在 kivy 中,尽可能使用 .kv 文件是一种很好的做法。
在这个例子中,我希望能够使用 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