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

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

我有两个文件:main.py 和 classbanner.py,如下所示。我正在尝试在我的应用程序上格式化页面。但是我在 classbanner.py 代码中遇到了这个错误。谁能帮我弄清楚为什么会出现此错误:

文件“C:\Users\JeffO\OneDrive\Desktop\Gym App\main.py”,第 162 行,在 MainApp().运行()

文件“C:\Users\JeffO\anaconda3\lib\site-packages\kivy\app.py”,第 949 行,在 运行 self._run_prepare()

文件“C:\Users\JeffO\anaconda3\lib\site-packages\kivy\app.py”,第 944 行,在 _run_prepare self.dispatch('on_start')

文件“kivy_event.pyx”,第 709 行,在 kivy._event.EventDispatcher.dispatch

文件“C:\Users\JeffO\OneDrive\Desktop\Gym App\main.py”,第 96 行,在 on_start W = ClassBanner(class_1 = next(key_iterator),class_2 = next(key_iterator),

文件“C:\Users\JeffO\OneDrive\Desktop\Gym App\classbanner.py”,第 24 行,在 init 中 超级(ClassBanner,自我)。init(**kwargs)

文件“C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\gridlayout.py”,第 279 行,在 init 中 super(GridLayout, self).init(**kwargs)

文件“C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\layout.py”,第 76 行,在 init 中 super(Layout, self).init(**kwargs)

文件“C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\widget.py”,第 350 行,在 init 中 super(Widget, self).init(**kwargs)

文件“kivy_event.pyx”,第 245 行,在 kivy._event.EventDispatcher.init

TypeError: object.init() 只接受一个参数(要初始化的实例)

MAIN.PY

"""
Created on Sun Oct 17 15:41:25 2021

@author: Jeff Ohana
"""
import sys
sys.path.append("/".join(x for x in __file__.split("/")[:-1]))
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
import requests
import json
from myfirebase import MyFirebase
from workoutbanner import WorkoutBanner
from classbanner import ClassBanner
from kivy.properties import ListProperty, StringProperty, ObjectProperty
from kivy.utils import platform
if platform == 'ios':
    from pyobjus import autoclass
from kivy.clock import mainthread

    
class HomeScreen(Screen):
    pass

class ImageButton(ButtonBehavior,Image):
    pass

class SigninScreen(Screen):
    pass

class MealofthedayScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

class SigninScreen(Screen):
    pass

class ColorScreen(Screen):
    pass

class ClassscheduleScreen(Screen):
    pass

class MainApp(App):
    
    native_image_picker = ObjectProperty(None)
    image_path = StringProperty("")
    my_user_id = "user1"
    user_table = "users"
    activity_table = "activities"
    class_table = "classes"
    user_id = StringProperty('user1')
    get_users = requests.get("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + user_table + ".json")
    data_get_users = json.loads(get_users.content.decode())
    image_source_profile = StringProperty(str(data_get_users[my_user_id]['picture']))
    color_writings = StringProperty(str(data_get_users[my_user_id]['color']))
    
    def build(self):
        self.my_user_id = 'user1'
        self.my_firebase = MyFirebase()
        GUI = Builder.load_file("main.kv")
        return GUI 
    
    def on_start(self):
        #Query database data
        if platform == 'ios':
            self.native_image_picker = autoclass("NativeImagePicker").alloc().init()
        result_users = requests.get("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + ".json")
        result_activities = requests.get("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.activity_table + ".json")
        result_classes = requests.get("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.class_table + ".json")
        data_users = json.loads(result_users.content.decode())
        data_activities = json.loads(result_activities.content.decode())
        data_classes = json.loads(result_classes.content.decode())
        
        streak_label = self.root.ids['home_screen'].ids['streak_label']
        streak_label.text = str(data_users[self.my_user_id]['streak'])
        
        banner_grid = self.root.ids['home_screen'].ids['banner_grid']
        for workouts in data_activities.values():
            print(workouts)
            W = WorkoutBanner(user=workouts['user'],date=workouts['date'],firstName=workouts['firstName']
                              ,typeWorkout=workouts['typeOfWorkout'],lenghtWorkout=workouts['lenghtOfWorkout']
                              ,color_writings = self.color_writings)
            banner_grid.add_widget(W)
            
        class_grid = self.root.ids['classschedule_screen'].ids['class_grid']
        for days in data_classes.values():
            values_classes = days.values()
            key_iterator = iter(days)
            value_iterator = iter(values_classes)
            W = ClassBanner(class_1 = next(key_iterator),class_2 = next(key_iterator),
                            class_3 = next(key_iterator), int_class_1 = next(value_iterator),
                            int_class_2 = next(value_iterator), int_class_3 = next(value_iterator))
            class_grid.add_widget(W)
            
    def update(self):
        print("Updating image...")

        folder = "/".join(x for x in self.user_data_dir.split("/")[:-1])
        image_path = folder + "/" + "cached.png"
        self.image_source_profile = image_path
        my_profile_picture_data = '{"picture":"%s"}'%image_path
        requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_profile_picture_data)
            
    def pick_image(self):
        if platform == 'ios':
            self.native_image_picker.displayImagePicker() 
        
    def changeColor(self,color):
        if color == 'red':
            color_code = 'ff0000'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
        elif color == 'electric blue':
            color_code = '0000ff'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
        elif color == 'cyan':
            color_code = '00eeee'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
        elif color == 'green':
            color_code = '008000'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
        elif color == 'yellow':
            color_code = 'ffff00'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
        elif color == 'purple':
            color_code = '9b30ff'
            my_color_data = '{"color":"%s"}'%color_code
            requests.patch("https://uniquedatabase-c4647-default-rtdb.firebaseio.com/" + self.user_table + "/" +  self.my_user_id + ".json",
                       data=my_color_data)
            
        
        #Fill HomeScreen feed
    def change_screen(self,screen_name):
        screen_manager = self.root.ids["screen_manager"]
        screen_manager.current = screen_name
    
    @mainthread
    def on_correct_info(self, users):
        self.my_user_id = users
        self.change_screen('home_screen')

    @mainthread
    def on_incorrect_info(self, login_message):
        login_message.text = 'invalid username or password'
        
MainApp().run()

CLASSBANNER.PY

from kivy.uix.gridlayout import GridLayout 
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.image import AsyncImage
from kivy.uix.label import Label
from firebase_functions import get_profile_picture
from datetime import datetime, timedelta
from kivy.properties import ListProperty, StringProperty

class ClassBanner(GridLayout):
    
    rows = 4
    class_1 = StringProperty('')
    class_2 = StringProperty('')
    class_3 = StringProperty('')
    def __init__(self,**kwargs):
        super(ClassBanner, self).__init__(**kwargs)
        
        line1 = FloatLayout()
        text_line1 = '[b]Monday[/b]'
        day_label = Label(text=text_line1,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        day_label.font_size = '10sp' 
        day_label.texture_update()
        line1.add_widget(day_label)
        
        line2 = GridLayout()
        text_line2 = kwargs['class_1']
        int_line2 = str(kwargs['int_class_1'])
        class1_label = Label(text=text_line2,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class1_int_label = Label(text=int_line2,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class1_label.font_size = '10sp' 
        class1_int_label.font_size = '10sp' 
        class1_label.texture_update()
        class1_int_label.texture_update()
        line2.add_widget(class1_label)
        line2.add_widget(class1_int_label)
        
        line3 = GridLayout()
        text_line3 = kwargs['class_2']
        int_line3 = str(kwargs['int_class_2'])
        class2_label = Label(text=text_line3,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class2_int_label = Label(text=int_line3,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class2_label.font_size = '10sp' 
        class2_int_label.font_size = '10sp' 
        class2_label.texture_update()
        class2_int_label.texture_update()
        line3.add_widget(class2_label)
        line3.add_widget(class2_int_label)
        
        line4 = GridLayout()
        text_line4 = kwargs['class_3']
        int_line4 = str(kwargs['int_class_3'])
        class3_label = Label(text=text_line4,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class3_int_label = Label(text=int_line4,size_hint = (1,1) , pos_hint = {'top':1.2,'right':1.5},markup=True)
        class3_label.font_size = '10sp' 
        class3_int_label.font_size = '10sp' 
        class3_label.texture_update()
        class3_int_label.texture_update()
        line4.add_widget(class3_label)
        line4.add_widget(class3_int_label)
        
        self.add_widget(line1)
        self.add_widget(line2)
        self.add_widget(line3)
        self.add_widget(line4)

将第 24 行编辑为:

super(ClassBanner, GridLayout).__init__(self, **kwargs)

如果它不能解决您的问题,请告诉我

您的 ClassBanner class 具有为 class_1class_2class_3 定义的属性,但您没有为 [=] 定义的属性14=]、int_class_2int_class_3。只需为这些添加属性,错误就会消失。