0

我一直在尝试编写几行代码,将 youtube 音乐视频 URL 转换为 mp3/mp4 + 720p,然后将其下载到我的 DropBox 音乐文件夹中。

当我尝试通过 TKinter 小部件(输入栏)传递 URL 时,我遇到了关于条目对象如何没有属性“类型”或 URL 无效的错误。是否与不在 youtube 链接中添加引号有关?

如果有人有任何见解,我将不胜感激。我想我错过了一些非常明显的东西,但我似乎无法弄清楚到底是什么。

#!/usr/bin/env python
import sys
import os
import tkinter
from pytube import *
from tkinter import *

top=tkinter.Tk()
yt_variable = StringVar()

def helloCallBack():
    #Select youtube link you want to upload and print contents
    yt = YouTube(yt_entry)
    print(yt.get_videos())
    print(yt.filename)    
    #Set parameters for youtube video
    video = yt.get('mp4', '720p')
    print(yt.videos)
    print("success")

    #Select download location for youtube video
    video.download('C:/Users/coope/Dropbox/BrokenBow/Music/')
    print("Downloaded " + str(yt.filename) + " to " + str(video.download) + " successfully!")
    return

yt_label=tkinter.Label(top,text='Paste Link + Press Go')
yt_label.pack()
yt_button=tkinter.Button(top,text='Go',command= helloCallBack)
yt_button.pack()
yt_entry=tkinter.Entry(top, textvariable=yt_variable)
yt_entry.get()
yt_entry.pack()

top.mainloop()
4

1 回答 1

1

简而言之,您有以下内容:

yt_entry=tkinter.Entry(top, textvariable=yt_variable)
yt_entry.get()
yt = YouTube(yt_entry)

您期望这会创建一个Entry小部件,检索其内容,并将检索到的值发送到YouTube()构造函数。它不是那样工作的。您实际上是在创建一个Entry小部件,立即检索其内容,丢弃这些内容(无论如何这将是空的,因为那时您还没有机会在该字段中放入任何内容),然后尝试发送Entry小部件本身给YouTube()构造函数。

最重要的是,你给了Entry小部件 a textvariable,但你从不使用它。

相反,在回调中检索该Entry小部件的内容(通过它的)。textvariable您甚至可以在YouTube()构造函数调用中执行此操作。

...
top=tkinter.Tk()
yt_variable = StringVar()

def helloCallBack():
    ...
    yt = YouTube(yt_variable.get())
    ...

...
yt_entry=tkinter.Entry(top, textvariable=yt_variable)
yt_entry.pack()

top.mainloop()

由于您没有对该Entry小部件做任何特别的事情,因此根本不需要 a textvariable

...
top=tkinter.Tk()

def helloCallBack():
    ...
    yt = YouTube(yt_entry.get())
    ...

...
yt_entry=tkinter.Entry(top,)
yt_entry.pack()

top.mainloop()

return此外,函数末尾也不需要有一个bare 。无论何时无事可做,它都会返回,默认返回值为(与使用裸语句返回None的值相同,或使用)。returnreturn None

于 2016-12-25T07:10:24.520 回答