代码之家  ›  专栏  ›  技术社区  ›  Jason Donegan

TypeError:应为str、字节或os。PathLike对象,而不是Button

  •  0
  • Jason Donegan  · 技术社区  · 2 年前

    有人能告诉我这意味着什么吗

    TypeError: expected str, bytes or os.PathLike object, not Button
    

    我正在尝试制作一个kivy应用程序,打开文件浏览器并从链接中保存文件。我可以在没有实现文件浏览器的情况下使其成功工作,但当我使用plyer/ilechooser添加文件浏览器时,我似乎无法按下按钮来保存文件。例如:

    1. 我把链接粘贴到一个文本框中。
    2. 按下文件浏览器按钮
    3. 文件浏览器打开我选择保存文件的位置
    4. 然后我单击“保存”。
    5. 点击我创建的下载按钮后,我会看到这个错误

    (我还认为,当我试图从一个函数获取另一个函数的位置,而第二个函数需要一个路径来保存文件时,会出现错误。)

    我想我会出现这个错误,因为当我选择位置时,它不会给我一个原始字符串,但我可能错了。 如果你需要代码,请告诉我。

    编辑:这是我正在处理的代码。忽略任何不必要的导入。此代码正在进行中。

    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()
    
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Joshua Shew    2 年前

    有人能告诉我这意味着什么吗 TypeError: expected str, bytes or os.PathLike object, not Button

    A. TypeError 表示“操作或函数应用于不适当类型的对象。”您传递了一个按钮(很可能是 kivy.uix.button.Button )作为函数的参数,而该函数需要一个路径。该错误还会告诉您它可以接受哪些类型: str , bytes ,或 os.PathLike 对象(例如。 pathlib.Path )