Kivy 反对齐全应用代码创立界面布局和控件,最近也刚刚推出 2.0 版。应用的时候,发现新版跟旧版有一处差别:
import kivy
kivy.require('2.0.0') # replace with your current kivy version !
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
label = Label(id='mouse_label',
text='pos~~~',
pos=(0, 0),
width='50dp',
height='20dp',
font_size=12,
bold=True,
color=(0.1, 0.1, 0.1, 1),
outline_width=1,
outline_color=(1, 1, 1)
)
return label
if __name__ == '__main__':
MyApp().run()
下面把官网文档的示例代码稍作改变,减少了初始化 Label 的很多属性,在 1.x 版本中能够失常运行。但降级到 2.0 版,就会报错:
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
这是个经典的 Kivy 报错,也十分诡异,齐全不能了解——明明 Label 类的构造函数,能够接管多个参数么!即便调试进去,也看不出问题所在,只晓得是调用父类的父类的(没看错,就是两级父类,指向 WidgetBase)构造函数出错的。不过既然实例代码能用,问题必定出在我补充的参数上,原本认为是哪个款式被废除了,后果试来试去,发现居然是 id!?
只有把 id='mouse_label'
这行删掉,所有就恢复正常了,为什么临时还不知。最终胜利运行的代码如下:
import kivy
kivy.require('2.0.0') # replace with your current kivy version !
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
label = Label(
text='pos~~~',
pos=(0, 0),
width='50dp',
height='20dp',
font_size=12,
bold=True,
color=(0.1, 0.1, 0.1, 1),
outline_width=1,
outline_color=(1, 1, 1)
)
return label
if __name__ == '__main__':
MyApp().run()
运行成果