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

Passing a URL through the entry widget (TKinter // Python 3+)

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

当我尝试通过 TKinter 小部件(输入栏)传递 URL 时,我遇到了有关输入对象如何没有属性 'type' 的错误,或者 URL 无效。是不是和youtube不加引号有关link什么的?

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

#!/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()

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

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。它会 return 无论何时无事可做,默认 return 值为 None (与 return 与裸 return 相同语句,或使用 return None).