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_1
、class_2
和 class_3
定义的属性,但您没有为 [=] 定义的属性14=]、int_class_2
或 int_class_3
。只需为这些添加属性,错误就会消失。
我有两个文件: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_1
、class_2
和 class_3
定义的属性,但您没有为 [=] 定义的属性14=]、int_class_2
或 int_class_3
。只需为这些添加属性,错误就会消失。