有人能告诉我这意味着什么吗
TypeError: expected str, bytes or os.PathLike object, not Button
我正在尝试制作一个kivy应用程序,打开文件浏览器并从链接中保存文件。我可以在没有实现文件浏览器的情况下使其成功工作,但当我使用plyer/ilechooser添加文件浏览器时,我似乎无法按下按钮来保存文件。例如:
-
我把链接粘贴到一个文本框中。
-
按下文件浏览器按钮
-
文件浏览器打开我选择保存文件的位置
-
然后我单击“保存”。
-
点击我创建的下载按钮后,我会看到这个错误
(我还认为,当我试图从一个函数获取另一个函数的位置,而第二个函数需要一个路径来保存文件时,会出现错误。)
我想我会出现这个错误,因为当我选择位置时,它不会给我一个原始字符串,但我可能错了。
如果你需要代码,请告诉我。
编辑:这是我正在处理的代码。忽略任何不必要的导入。此代码正在进行中。
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from plyer import filechooser
from pytube import YouTube
import os
class SayHello(App):
def build(self):
self.window = GridLayout()
self.window.cols = 1
self.window.size_hint = (0.6, 0.7)
self.window.pos_hint = {"center_x":0.5, "center_y":0.5}
self.window.add_widget(Image(source="logo.png"))
#Label
self.videolink = Label(text = "What is the link of your Youtube video?" ,
font_size =18
)
self.window.add_widget(self.videolink)
self.user = TextInput(multiline = False,
padding_y = (20,20),
size_hint = (1, 0.5)
)
self.window.add_widget(self.user)
self.loc = Label(text = "what is the location where you want this file saved? ",
font_size =18
)
self.window.add_widget(self.loc)
#self.lc = TextInput(multiline = False,
# padding_y = (20,20),
# size_hint = (1, 0.5))
#self.window.add_widget(self.lc)
self.buttonone = Button(text = "Choose where to save",
size_hint = (1, 0.5),
bold =True
)
self.buttonone.bind(on_press=self.filebrowser)
self.window.add_widget(self.buttonone)
#Button
self.button = Button(text = " Download Video",
size_hint = (1, 0.5),
bold = True,
background_color = '#32FFD1'
)
self.button.bind(on_press=self.callback)
self.window.add_widget(self.button)
return self.window
def filebrowser(self, instance):
path = filechooser.save_file(title="Choose where to Save",
filters=[( "*.mp4")])
return path
def callback(self, path):
self.videolink.text = "Video Downloading Please Wait... "
t = YouTube(self.user.text)
l = path
highresvid = t.streams.get_highest_resolution()
highresvid.download(output_path = l)
SayHello().run()