【问题标题】:kivymd object.__init__() takes exactly one argument (the instance to initialize)kivymd object.__init__() 只接受一个参数(要初始化的实例)
【发布时间】:2021-01-06 07:19:18
【问题描述】:

我正在尝试构建一个 youtube 视频下载器,但我遇到了一个奇怪的错误,我不知道怎么做?我认为我的代码看起来不错,但有问题,我会尝试但我无法弄清楚!

请帮帮我-

错误

    Traceback (most recent call last):
   File "/home/rohit/Desktop/Youtube_downloader/main.py", line 84, in <module>
     Itube().run()
   File "/home/rohit/Desktop/Youtube_downloader/main.py", line 38, in __init__
     self.file_manager = MDFileManager(
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/site-packages/kivymd/uix/filemanager.py", line 403, in __init__
     super().__init__(**kwargs)
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/site-packages/kivymd/theming.py", line 907, in __init__
     super().__init__(**kwargs)
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/site-packages/kivy/uix/floatlayout.py", line 65, in __init__
     super(FloatLayout, self).__init__(**kwargs)
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/site-packages/kivy/uix/layout.py", line 76, in __init__
     super(Layout, self).__init__(**kwargs)
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/site-packages/kivymd/uix/behaviors/backgroundcolorbehavior.py", line 150, in __init__
     super().__init__(**kwargs)
   File "/home/rohit/Desktop/Youtube_downloader/env/lib/python3.8/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)

ma​​in.py

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivymd.uix.filemanager import MDFileManager
from kivymd.toast import toast
from youtube_dl import kv


Window.size = (450, 740)



class HomeScreen(Screen):
    pass

class SigninScreen(Screen):
    pass




sm = ScreenManager()
sm.add_widget(HomeScreen(name='homescreen'))
sm.add_widget(SigninScreen(name='signinscreen'))





class Itube(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        Window.bind(on_keyboard=self.events)

        self.manager_open = False
        self.file_manager = MDFileManager(
            exit_manager = self.exit_manager, 
            self_path = self.select_path,
            preview = True,
        )


    def build(self):
        return Builder.load_string(kv)


    def file_manager_open(self):
        self.file_manager.show('/')  # output manager to the screen
        self.manager_open = True

    def select_path(self, path):
        '''It will be called when you click on the file name
        or the catalog selection button.

        :type path: str;
        :param path: path to the selected directory or file;
        '''

        self.exit_manager()
        toast(path)

    def exit_manager(self, *args):
        '''Called when the user reaches the root of the directory tree.'''

        self.manager_open = False
        self.file_manager.close()

    def events(self, instance, keyboard, keycode, text, modifiers):
        '''Called when buttons are pressed on the mobile device.'''

        if keyboard in (1001, 27):
            if self.manager_open:
                self.file_manager.back()
        return True






if __name__ == "__main__":
    Itube().run()

youtube_dl.py

kv = """

ScreenManager:
    HomeScreen:
    SigninScreen:




<HomeScreen>:
    name: 'homescreen'



    MDBoxLayout:
        orientation: 'vertical'
        spacing: 20
        padding: 40


        MDTextFieldRound:
            hint_text: 'Url'
            multline: False
            normal_color: (1, 1, 1, 100)
            color_active: (232/255, 232/255, 232/255, 600)
            
        MDBoxLayout:
            orientation: 'horizontal'
            adaptive_size: True
            spacing: 22
            pos_hint: {'center_x': 0.5, 'center_y': .99}

            MDToolbar:
                title: 'FileManager'
                left_action_items: [['menu', lambda x: None]]
                elevation: 10

            MDRaisedButton:
                text: 'Import from computer'
                icon: "folder"
                on_release: app.file_manager_open()
            
            MDRaisedButton:
                text: 'Import from itube cloud'
    

    

        


<SigninScreen>:
    name: 'signinscreen'


"""

或者您能否解释一下构建大型 kivymd 应用程序的最佳方式。

【问题讨论】:

  • 尝试一次将你的问题缩小到一个单一的事情,而不是你的三个不相关的问题加上非常广泛的询问。此外,如果您有错误,请发布完整的内容 - 您仅发布了少量文本,其中不包含任何旨在帮助识别问题的上下文信息。最后,尝试提供一个更简单的示例,这里的大部分代码都不太可能引发错误,因此只会让读者更难识别您的问题。
  • 至于错误,它的意思是你向一个类传递了一个意想不到的参数,并且这个参数最终被传递到超类链上,直到它到达object.__init__。因此,您应该寻找传递不存在的参数的地方,例如对于exit_manager = self.exit_manager, 行,exit_manager 实际上是一个有效的参数?
  • 如果我删除self.exit_manager,我得到exit_manager = exit_manager, NameError: name 'exit_manager' is not defined 错误。
  • exit_manager 只是一个示例,您需要查找我描述的错误类型。
  • 另外,您没有在此处粘贴的错误的附加内容可能有一些关于什么对象实例化是问题的线索。

标签: python python-3.x kivy kivymd


【解决方案1】:

在 self.file_manager 中你写了self_path = self.select_path。它将是select_path = self.select_path。另外,我不知道preview=True 有什么问题,可能是一个错误。 所以你的功能是:

def __init__(self, **kwargs):
    super().__init__(**kwargs)
    Window.bind(on_keyboard=self.events)
    self.manager_open = False
    self.file_manager = MDFileManager(
        exit_manager = self.exit_manager, 
        select_path = self.select_path,
    )
    self.file_manager.preview = True #Can try if it works

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 2020-01-25
    • 1970-01-01
    • 2020-11-14
    • 2021-12-19
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多