объект kivymd.__init__() принимает ровно один аргумент (экземпляр для инициализации)

#python #python-3.x #kivy #kivymd

#python #python-3.x #kivy #kivymd

Вопрос:

Я пытаюсь создать загрузчик видео с 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)
  

main.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.

Комментарии:

1. Постарайтесь сузить свой вопрос до одного вопроса сразу, а не до трех несвязанных вопросов плюс очень широкий запрос. Кроме того, если у вас возникла ошибка, опубликуйте ее полностью — вы опубликовали только небольшой объем текста, который не содержит никакой контекстной информации, предназначенной для выявления проблемы. И, наконец, попробуйте привести более минимальный пример, маловероятно, что большая часть кода здесь необходима для возникновения ошибки, поэтому читателям будет только сложнее определить вашу проблему.

2. Что касается ошибки, это означает, что вы передали неожиданный аргумент классу, и этот аргумент в конечном итоге был передан по цепочке суперклассов, пока он не достигнет object.__init__ . Поэтому вам следует искать места, где вы передаете аргументы, которые не существуют, например, для строки exit_manager = self.exit_manager, exit_manager , которая на самом деле является допустимым аргументом здесь?

3. Если я удалю self.exit_manager , я получу exit_manager = exit_manager, NameError: name 'exit_manager' is not defined ошибку.

4. exit_manager это был просто пример, вам нужно искать тип ошибки, который я описал.

5. Кроме того, дополнительное содержимое ошибки, которое вы не вставили сюда, вероятно, содержит некоторые подсказки о том, какой экземпляр объекта является проблемой.

Ответ №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