通过条目小部件传递URL(TKinter // Python 3+)

时间:2016-12-25 06:53:38

标签: python python-3.x youtube dropbox pytube

我一直试图整理几行代码,这些代码带有一个YouTube音乐视频网址并将其转换为mp3 / mp4 + 720p,然后将其下载到我的DropBox音乐文件夹。

当我尝试通过TKinter小部件(条目栏)传递URL时,我遇到的错误是关于条目对象如何没有属性'type',或者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()

1 个答案:

答案 0 :(得分:1)

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

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

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

最重要的是,您为Entry小部件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

由于您对textvariable小部件没有做任何特别的事情,因此根本不需要... top=tkinter.Tk() def helloCallBack(): ... yt = YouTube(yt_entry.get()) ... ... yt_entry=tkinter.Entry(top,) yt_entry.pack() top.mainloop()

return

此外,在功能结束时不需要裸None。无论何时没有更多事情要做,它都会返回,默认返回值为return(与使用return None语句返回的内容相同,或Number of forks since boot. )。