我正在尝试构建一个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应用程序的最佳方法吗?
发布于 2020-12-21 06:11:23
在self.file_manager中,您已经编写了self_path = self.select_path
。这将是select_path = self.select_path
。而且,我不知道preview=True
有什么问题,也许是个bug。所以你的职能是:
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
https://stackoverflow.com/questions/63971206
复制相似问题