Python kivymd TypeError:_init__;()接受1个位置参数,但给出了2个

2024-09-28 23:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了相当多的时间试图解决这个问题, 我的实际目标是运行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') )#错误行 我知道问题是,你只能为函数传递一个参数,但是有一个方法是正确的! 请帮助T-T


Tags: fromimportselfgithub列表错误builderlist
1条回答
网友
1楼 · 发布于 2024-09-28 23:54:32

我不知道这是否可以在一行完成,但这对我来说很有效

    #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()

enter image description here

相关问题 更多 >