首页 > 解决方案 > Python kivymd TypeError: __init__() 接受 1 个位置参数,但给出了 2 个

问题描述

我花了相当多的时间试图解决这个问题,我的实际目标是运行一个 forloop 以在 kivymd 中生成一个列表,而这样做我得到了这个错误?

TypeError: __init__() takes 1 positional argument but 2 were given

这是我简化的代码

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import *

KV = '''
ScrollView:

    MDList:
        id: list
'''

class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):

        ib = IconLeftWidget(icon='github')
        ibn = OneLineAvatarIconListItem(
            IconLeftWidget(icon='github')
            )
        
        self.root.ids.list.add_widget(ib)

MainApp().run()

需要通过 forloop 生成列表并将图标用作按钮

OneLineAvatarIconListItem( IconLeftWidget(icon='github') )# error line 我知道问题是你只能为函数传递一个参数,但是有一个正确的方法!请帮助TT

标签: pythonpython-3.xkivykivy-languagekivymd

解决方案


我不知道它是否可以在一行中完成,但这对我有用

    #ibn = OneLineAvatarIconListItem(text='Hello')
    ibn = OneLineAvatarIconListItem()

    ibn.add_widget(IconLeftWidget(icon='plus'))
    ibn.add_widget(IconRightWidget(icon='minus'))

    self.root.ids.list.add_widget(ibn)

您可以创建自己的小部件以使其更简单

class MyItem(OneLineAvatarIconListItem):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.add_widget(IconLeftWidget(icon='plus'))
        self.add_widget(IconRightWidget(icon='minus'))
 

# ... code ...


        #my_item = MyItem(text='World')
        my_item = MyItem()
        
        self.root.ids.list.add_widget(my_item)

最少的工作代码

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.list import *

KV = '''
ScrollView:

    MDList:
        id: list
'''

class MyItem(OneLineAvatarIconListItem):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.add_widget(IconLeftWidget(icon='plus'))
        self.add_widget(IconRightWidget(icon='minus'))
        
class MainApp(MDApp):
    
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):

        ib = IconLeftWidget(icon='github')

        self.root.ids.list.add_widget(ib)

        ibn = OneLineAvatarIconListItem(text="Hello", bg_color="lime")
        ibn.add_widget(IconLeftWidget(icon='plus'))
        ibn.add_widget(IconRightWidget(icon='minus'))
        
        self.root.ids.list.add_widget(ibn)

        my_item = MyItem(text="World", bg_color="red")
        
        self.root.ids.list.add_widget(my_item)
        
MainApp().run()

在此处输入图像描述


推荐阅读