通过条目小部件传递 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
).
我一直在尝试编写几行代码,将 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
).