【问题标题】:Kivy and Python TypeError: object.__init__() takes exactly one argument (the instance to initialize)Kivy 和 Python TypeError: object.__init__() 只接受一个参数(要初始化的实例)
【发布时间】:2021-12-19 09:31:23
【问题描述】:

我在其他 kivy 文件中有两个文件,如下所示。运行主文件时,出现以下错误:

File "C:\Users\JeffO\OneDrive\Desktop\Gym App\workoutbanner.py", line 13, in __init__
    super(WorkoutBanner, 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)

你能帮我找出问题所在吗?我期待在主屏幕上获得个人资料图片。我怀疑第二个文件中的 left_image 会导致问题,但我不确定。

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 workoutbanner import WorkoutBanner


class HomeScreen(Screen):
    pass
class ImageButton(ButtonBehavior,Image):
    pass

class SigninScreen(Screen):
    pass

GUI = Builder.load_file("main.kv")

class MainApp(App):
    my_user_id = 'user1'
    user_table = "users"
    activity_table = "activities"
    def build(self):
        return GUI
    
    def on_start(self):
        #Query database data
        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")
        data_users = json.loads(result_users.content.decode())
        data_activities = json.loads(result_activities.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():
            W = WorkoutBanner(user=workouts['user'])
            banner_grid.add_widget(W)
            
        
        #Fill HomeScreen feed
    def change_screen(self,screen_name):
        screen_manager = self.root.ids["screen_manager"]
        screen_manager.current = screen_name
        
MainApp().run()
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.label import Label
from firebase_functions import get_profile_picture
from datetime import datetime

class WorkoutBanner(GridLayout):
    
    rows = 1
  
    def __init__(self,**kwargs):
        super(WorkoutBanner, self).__init__(**kwargs)
      
        left = FloatLayout()
        left_image = Image(source= "images/" + kwargs['user'], 
        size_hint =(1,0.8), pos_hint={"top":1,"left":1})
        
        left.add_widget(left_image)
        
        self.add_widget(left)

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    代码行:

    W = WorkoutBanner(user=workouts['user'])
    

    正在为WorkoutBanner 提供一个kwargs 参数,但WorkoutBanner__init__() 方法无法处理kwarg。结果,kwargs 被传递给super

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

    然后又将kwargs 传递给它的super。以此类推,直到它到达导致异常的EventDispatcher.__init__()

    我相信您可以通过将Property 添加到WorkoutBanneruser 属性来解决此问题:

    class WorkoutBanner(GridLayout):
        rows = 1
        user = StringProperty('')
    

    这假定userString

    【讨论】:

      【解决方案2】:

      初始化程序得到了意外的关键字参数 (https://github.com/kivy/kivy/issues/3650#issuecomment-148154997)

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 2020-11-14
      • 2019-12-31
      • 2021-01-06
      • 2021-04-16
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多