我对编程非常陌生,目前我正在跟踪一个视频,为一个项目开发一个应用程序。我似乎不明白是什么导致了下面的错误。
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)
我能得到的任何帮助都是非常感谢的!
发布于 2021-03-23 05:16:34
此错误通常是由于将意外参数传递给基类(object
类) __init__()
方法造成的。在您的示例中,workout_image
和description
关键字参数将被传递给超类,并最终传递给object
类。您可以通过使用kwargs.pop()
在__init__()
方法__init__()
WorkoutBanner
中调用WorkoutBanner
之前删除这些参数来纠正这一点。一个更简单的方法是为这两个参数定义属性,让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)
https://stackoverflow.com/questions/66757352
复制相似问题