提问人:ulsaa 提问时间:11/12/2023 更新时间:11/13/2023 访问量:30
搜索结果不一致 Pytube
Search Result inconsistency Pytube
问:
我正在尝试制作一个 youtube 视频下载器,它可以搜索、显示结果,当您单击一个时,会下载视频。我使用 pytube 进行 youtube 连接,使用 tkinter 进行 GUI。但是我面临着这个问题:当我点击一个视频时,另一个搜索结果会被下载。例如,搜索结果是 A、B、C、D、E,当我单击 B 时,它会下载 D。 代码如下:
import pytube
import tkinter as tk
import tkinter.font as font
root = tk.Tk()
root.title("Video Downloader")
root.geometry('1000x1000')
entry = tk.Entry(root, width=400, font=("Tahoma 30"))
entry.pack()
def Download(link):
youtubeObject = pytube.YouTube(link)
youtubeObject = youtubeObject.streams.get_highest_resolution()
try:
youtubeObject.download()
except:
print("An error has occurred")
print("Download is completed successfully")
def ComputeMinuteLenght(num):
if num//60 == 0:
return "<1 minute"
elif num//60 == 1:
return "1 minute"
else:
str(num//60)+" minutes"
def ButtonFunc():
s = pytube.Search(entry.get())
for v in s.results:
answerButton = tk.Button(root, text=v.title + "-> "+ComputeMinuteLenght(v.length), command=lambda: Download(v.watch_url))
answerButton['font'] = font.Font(size=15)
answerButton.pack()
SubmitButton = tk.Button(root, text="Show Results", command=ButtonFunc)
SubmitButton['font'] = font.Font(size=30)
SubmitButton.pack()
root.mainloop()
我试图将 v 更改为 v+5 等,但它不能始终如一地下载距离 5 个结果的搜索结果等等。
答:
1赞
CodeMaven42
11/12/2023
#1
我现在无法编码,但我认为问题出在 lambda “command=lambda: Download(v.watch_url)”ButtonFunc
您可以将其更新为:
for v in s.results:
answerButton = tk.Button(root, text=v.title + "-> "+ComputeMinuteLenght(v.length), command=lambda vid=v: Download(vid.watch_url))
answerButton['font'] = font.Font(size=15)
answerButton.pack()
我不在城里,无法使用我的电脑,因此我没有尝试过这个,但我认为这就是问题所在,你可以检查一下。
评论
0赞
ulsaa
11/12/2023
非常感谢。当我试图找到错误时,我从未考虑过 lambda。
0赞
CodeMaven42
11/12/2023
@ulsaa您最欢迎的!
评论