【问题标题】:Error in kivy app: object.__init__() takes exactly one argument (the instance to initialize)kivy 应用程序中的错误:object.__init__() 只采用一个参数(要初始化的实例)
【发布时间】:2021-07-11 20:28:12
【问题描述】:

我正在尝试制作一个表单应用程序,但我不明白该错误。不幸的是,我在很多方面都未能解决它:

TypeError: object.__init__() takes exactly one argument (the instance to initialize)

代码如下:


from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.graphics import Color, Rectangle
import kivy.utils


class UsersBanner(GridLayout):

    def __init__(self, **kwargs):
        self.rows = 1
        super(UsersBanner, self).__init__(**kwargs)
        with self.canvas.before:
            Color(rgb=(kivy.utils.get_color_from_hex("#67697C")))
            self.rect = Rectangle(size=self.size, pos=self.pos)
        self.bind(pos=self.update_rect, size=self.update_rect)

        # need left float layout
        left = FloatLayout()
        user_label = Label(text=str(kwargs['user_name']), size_hint=(1, .3), pos_hint={"top": .225, "right": 1})
        left.add_widget(user_label)
        # need middle float layout
        middle = FloatLayout()
        nationality_label = Label(text=str(kwargs['nationality']), size_hint=(1, .3), pos_hint={"top": .225, "right": .9})
        middle.add_widget(nationality_label)
        # need right float layout
        right = FloatLayout()
        user_image = Image(source="icons/users/" + kwargs['user_image'], size_hint=(1, .3),
                           pos_hint={"top": .225, "right": .7})
        right.add_widget(user_image)

        self.add_widget(left)
        self.add_widget(middle)
        self.add_widget(right)

    def update_rect(self, *args):
        self.rect.pos = self.pos
        self.rect.size = self.size

错误:

File "/Users/alexisdsc/PycharmProjects/app_arabe/main.py", line 74, in <module>
     MainApp().run()
   File "/Users/alexisdsc/Library/Python/3.9/lib/python/site-packages/kivy/app.py", line 949, in run
     self._run_prepare()
   File "/Users/alexisdsc/Library/Python/3.9/lib/python/site-packages/kivy/app.py", line 944, in _run_prepare
     self.dispatch('on_start')
   File "_event.pyx", line 709, in kivy._event.EventDispatcher.dispatch
   File "/Users/alexisdsc/PycharmProjects/app_arabe/main.py", line 62, in on_start
     uu = UsersBanner(user_name=user['user_name'],  nationality=user['nationality'],
   File "/Users/alexisdsc/PycharmProjects/app_arabe/usersbanners.py", line 13, in __init__
     super(UsersBanner, self).__init__(**kwargs)
   File "/Users/alexisdsc/Library/Python/3.9/lib/python/site-packages/kivy/uix/gridlayout.py", line 279, in __init__
     super(GridLayout, self).__init__(**kwargs)
   File "/Users/alexisdsc/Library/Python/3.9/lib/python/site-packages/kivy/uix/layout.py", line 76, in __init__
     super(Layout, self).__init__(**kwargs)
   File "/Users/alexisdsc/Library/Python/3.9/lib/python/site-packages/kivy/uix/widget.py", line 350, in __init__
     super(Widget, self).__init__(**kwargs)
   File "_event.pyx", line 245, in kivy._event.EventDispatcher.__init__
 TypeError: object.__init__() takes exactly one argument (the instance to initialize)

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    如果你只用这两个参数创建一个对象

    uu = UsersBanner(user_name=user['user_name'],  nationality=user['nationality'])
    

    你能在 USerbanner init 中试试这个吗

    def __init__(self,user_name,nationality, **kwargs):   # intead of def __init__(self, **kwargs):
    

    如果有的话,你可以添加其他变量

    【讨论】:

    • 感谢您的快速答复。尽管如此,如果我禁止例如“user_name”参数(def__init__(self, nationality, **kwargs):
    • 您是否在同一 super() 行或 user_label = Label(text=str(kwargs['user_name']) 行中收到“Keyerror : "user_name"?
    • 在同一 super() 行中!
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2021-12-19
    • 2021-12-24
    • 2019-12-31
    相关资源
    最近更新 更多