[英]kivy screens. Do I have to initialize with super?
简短回答:
不,您在定义屏幕时不必使用super。 是的,你总是必须__init__
与super(如果你使用__init__
)。
更长的回答:
这对屏幕来说并不是唯一的。 在docs示例中,您不是在调用__init__
并传递任何参数,因此不需要super
。 您不需要__init__
调用来定义Kivy屏幕。 从SO问题来看,如果你正在运行__init__
你将** kwargs传递给对象层次结构并重新定义__init__
,这通常会运行父类的初始化。 super
用于允许你传递** kwargs并运行父__init__
而不显式调用父类,在这种情况下, Screen
继承自RelativeLayout
,它本身继承自FloatLayout
; 如果没有超级电话,你就会覆盖父类。
除非你有一些用处,否则你不需要调用__init__
。 这是我的一个应用程序的Screen
,没有__init__
调用(布局在.kv文件中设置):
class LoginScreen(Screen):
def login(self):
self.parent.current = 'ParameterScreen'
如果要在实例化已创建的类时设置屏幕的布局,内容,属性等,而不在.kv文件中定义这些内容,则将使用__init__
; 要做到这一点,你还需要超级如上所述。 虽然你可以使用.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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.