Reputation: 23
I have two files: main.py and classbanner.py shown below. I am trying to format a page on my application. But I encounter this error vis-a-vis my classbanner.py code. Can someone help me figure out why do i have this error coming up:
File "C:\Users\JeffO\OneDrive\Desktop\Gym App\main.py", line 162, in MainApp().run()
File "C:\Users\JeffO\anaconda3\lib\site-packages\kivy\app.py", line 949, in run self._run_prepare()
File "C:\Users\JeffO\anaconda3\lib\site-packages\kivy\app.py", line 944, in _run_prepare self.dispatch('on_start')
File "kivy_event.pyx", line 709, in kivy._event.EventDispatcher.dispatch
File "C:\Users\JeffO\OneDrive\Desktop\Gym App\main.py", line 96, in on_start W = ClassBanner(class_1 = next(key_iterator),class_2 = next(key_iterator),
File "C:\Users\JeffO\OneDrive\Desktop\Gym App\classbanner.py", line 24, in init super(ClassBanner, self).init(**kwargs)
File "C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\gridlayout.py", line 279, in init super(GridLayout, self).init(**kwargs)
File "C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\layout.py", line 76, in init super(Layout, self).init(**kwargs)
File "C:\Users\JeffO\anaconda3\lib\site-packages\kivy\uix\widget.py", line 350, in init super(Widget, self).init(**kwargs)
File "kivy_event.pyx", line 245, in kivy._event.EventDispatcher.init
TypeError: object.init() takes exactly one argument (the instance to initialize)
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)
Upvotes: 0
Views: 243
Reputation: 38937
Your ClassBanner
class has properties defined for class_1
, class_2
, and class_3
, but you don't have properties defined for int_class_1
, int_class_2
, or int_class_3
. Just add properties for those and the error should disappear.
Upvotes: 0
Reputation: 117
Edit line 24 to:
super(ClassBanner, GridLayout).__init__(self, **kwargs)
let me know if it not fixed your issue
Upvotes: 0