关于python:Kivy-20的一个变化

6次阅读

共计 1112 个字符,预计需要花费 3 分钟才能阅读完成。

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()

运行成果

正文完
 0