【问题标题】:Can't identify the following error: TypeError: object.__init__() takes exactly one argument (the instance to initialize)无法识别以下错误:TypeError: object.__init__() 仅采用一个参数(要初始化的实例)
【发布时间】:2021-03-23 04:39:30
【问题描述】:

我对编程很陌生,我目前正在关注一个视频来为一个项目开发一个应用程序。我似乎无法理解导致以下错误的原因。

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

代码如下; (第一个文件)

class MainApp(App):
    my_friend_id = 1
    def build(self):
        return GUI

    def on_start(self):
        # get database data
        result = requests.get("https://wearable-balance-belt1-default-rtdb.firebaseio.com/" + str(self.my_friend_id) +".json")
        data = json.loads(result.content.decode())
        # get and update avatar
        avatar_image = self.root.ids['home_screen'].ids['avatar_image']
        avatar_image.source = "icons/" + data['avatar']

        banner_grid = self.root.ids['home_screen'].ids['banner_grid']
        workouts = data['workouts'][1:]
        for workout in workouts:
            W = WorkoutBanner(workout_image=workout['workout_image'], description=workout['description'])
            banner_grid.add_widget(W)


    def change_screen(self, screen_name):
        # get the screen manager from the kv file
        screen_manager = self.root.ids['screen_manager']
        screen_manager.current = screen_name
        # screen_manager = self.root.ids


MainApp().run()

还有第二个文件;

from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.image import Image

class WorkoutBanner(GridLayout):
    rows = 1

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

        #left floatlayout
        left = FloatLayout()
        left_image = Image(source="icons/" + kwargs['workout_image'], size_hint=(1, .8), pos_hint={"top": 1, "left": 1})
        left_label = Label(text=kwargs['description'], size_hint=(1, .2), post_hint={"top": .2, "left": 1})
        left.add_widget(left_image)
        left.add_widget(left_label)

        self.add_widget(left)

如果我能得到任何帮助,我们将不胜感激!

【问题讨论】:

    标签: python kivy mobile-application


    【解决方案1】:

    该错误通常是由于将意外参数传递给基(object 类)__init__() 方法。在您的情况下,workout_imagedescription 关键字参数被传递给超类,并最终传递给 object 类。您可以通过在WorkoutBanner__init__() 方法中调用super 之前使用kwargs.pop() 删除这些参数来纠正此问题。更简单的方法是为这两个参数定义属性,让 kivy 处理从kwargs 中保存和删除它们,如下所示:

    class WorkoutBanner(GridLayout):
        rows = 1
        workout_image = StringProperty('')
        description = StringProperty('')
    
        def __init__(self, **kwargs):
            super(WorkoutBanner, self).__init__(**kwargs)
    
            #left floatlayout
            left = FloatLayout()
            left_image = Image(source="icons/" + self.workout_image, size_hint=(1, .8), pos_hint={"top": 1, "left": 1})
            left_label = Label(text=self.description, size_hint=(1, .2), pos_hint={"top": .2, "left": 1})
            left.add_widget(left_image)
            left.add_widget(left_label)
    
            self.add_widget(left)
    

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2020-11-14
      • 2021-07-11
      • 2021-12-24
      相关资源
      最近更新 更多