搜索结果不一致 Pytube

Search Result inconsistency Pytube

提问人:ulsaa 提问时间:11/12/2023 更新时间:11/13/2023 访问量:30

问:

我正在尝试制作一个 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 个结果的搜索结果等等。

蟒蛇 youtube pytube

评论


答:

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您最欢迎的!