繁体   English   中英

Python / Kivy中的__init__参数

[英]__init__ arguments in Python/Kivy

我正在尝试调用一个init方法,它是函数的父母。 我可能正在做一些显然很愚蠢的事情,但是我无法弄清楚。 当我有此代码时,我得到一个错误:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty, ListProperty
from kivy.clock import Clock
from kivy.graphics import Color

class FieldCommand(Widget):
    def __init__(self, **kwargs):
        super(FieldCommand, self).__init__(**kwargs)
        self.myBoard = Board(col=2, rows=2)
        for c in range(4):
            self.add_widget(Button(text = c))

class Board(Widget):
    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)



class FieldCommandApp(App):
    def build(self):
        return FieldCommand()


if __name__ == '__main__':
    FieldCommandApp().run()

具体来说,我的错误是:

File "/Users/.../PycharmProjects/FieldCommand/venv/lib/python3.7/site-packages/kivy/uix/widget.py", line 350, in __init__
     super(Widget, self).__init__(**kwargs)
   File "kivy/_event.pyx", line 243, in kivy._event.EventDispatcher.__init__
 TypeError: object.__init__() takes exactly one argument (the instance to initialize

)我在这里跟随示例:

class Container(BoxLayout):


    def __init__(self, **kwargs):
        super(Container, self).__init__(**kwargs)
        self.previous_text = open(self.kv_file).read()
        parser = Parser(content=self.previous_text)
        widget = Factory.get(parser.root.name)()
        Builder._apply_rule(widget, parser.root, parser.root)
        self.add_widget(widget)

为什么我的应用程序出现错误?

你打电话给self.myBoard = Board(col=2, rows=2)包括kwargscolrows传递给该Widget __init__()不接受那些kwargs。 因此,解决方法是在您的Board类中提取那些kwargs 您可以这样简单地在Board类中添加Properties来做到这一点:

class Board(Widget):
    # default values for `row` and `cols`
    col = NumericProperty(1)
    rows = NumericProperty(1)

    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM