ytdownloader- YouTube视频下载器Python应用程序
#编程 #python #tkinter

对这个 :

ytdownloader是一个Python Tkinter应用程序,可以帮助您下​​载任何视频或音频的YouTube视频。在这篇文章中,我们将讨论如何创建它。

假设您了解TKINTER的基础知识,我不会介绍TKINTER的细节。如果您不这样做,您可以将此帖子添加到您的阅读列表中,然后阅读一些TKINTER文档。

必需的模块:

要使此应用程序我将主要用于2个模块-TKINTER和PYTUBE。我还使用TKINTER的FileDialog和MessageBox模块。

tkinter 的情况下,它将随附Python安装程序。因此,无需单独安装它,但是 pytube 不带Python,因此我们需要安装它。

在您的终端中键入pip install pytube,然后键入enter安装pytube。

安装到pytube后,我们必须将其导入到我们的python文件中(在我的情况下为main.py)。

from tkinter import *
from tkinter.filedialog import askdirectory
from tkinter.messagebox import showerror, showinfo
from pytube import YouTube

最初,我不知道我从tkinter需要多少东西,所以我使用'*'。

从中导入所有内容

初始化tkinter:

导入模块后,让初始化tkinter并创建一个GUI窗口。然后给它一个名称和尺寸,即GUI窗口的大小和图标。我们将通过几个步骤完成所有这些操作 -

  • 首先创建一个tkinter tk()的实例,然后将其存储在名为“ root”的变量中,例如此root = Tk()。由于我正在从tkinter中导入所有内容,所以我可以写 tk()而不是 tkinter.tk()

  • 现在使用root.geometry()给它一个尺寸。我要给它的固定尺寸为350px宽度和250px的高度。因此,我也将执行此root.resizable(0, 0),以使其无法重新解析。

  • 然后使用root.title()给它一个名字。对于此应用程序,我将其命名 ytdownloader

  • 我还从Web下载了“ .ICO”扩展名的图标,并使用root.iconbitmap("./icon.ico")

  • 将其添加到此应用程序中
  • 现在通过编写root.configure(bg=bgColor)给这个应用程序颜色。我已经将颜色代码存储在变量中以多次使用。

  • 终于在文件底部的root.mainloop()

我们的应用程序应该看起来像这样。
look of applocation after the initialinzing procss


小部件实施:

让添加一些小部件,例如标签,按钮,输入小部件以使此交互式。

  • 就像标题一样,在顶部添加标签,然后将其包装到根部。
Label(root, text="Youtube Downloader",
   bg=bgColor,font="sarif 15 bold").pack(pady=7)

我也使用与根相同的背景来删除IT白色背景。

  • 现在添加一个框架,我将要放置入口小部件和OptionMenu。
frame = Frame(root, padx=10, pady=20,
        bg=bgColor, height=150)
frame.pack(fill="both")

在此应用程序中,我将添加一个条目和optionMenu小部件。输入小部件适用于URL输入,一个用于类型下载类型“视频”或“音频”的OptionMenu小部件,而另一个用于视频下载的视频的分辨率或质量。我还创建了三个TKINTER变量来存储其数据。

  • 创建输入小部件并将其放置并将其值存储到 link 变量。
link = StringVar()
Entry(frame, textvariable=link).place(in_=frame, anchor="c",
      relx=.5, rely=0.0, relheight=0.3, relwidth=0.9)
  • 创建optionMenu并将其值存储到两个变量中。我还将默认值设置为两个变量。我还在每个选项上的顶部添加了一个标签,以表示哪个是为了什么。您可以跳过这个。
Label(text="filetype", bg=bgColor).place(
    in_=frame, anchor="c", relx=.25, rely=.325)
fileType = StringVar()
fileType.set("video")
OptionMenu(frame, fileType, *["video", "audio"]
           ).place(in_=frame, anchor="c", relx=.25, rely=.575)

Label(text="resolution", bg=bgColor).place(
    in_=frame, anchor="c", relx=.75, rely=.325)

res = StringVar()
resList = ["144p", "240p", "360p", "480p", "720p", "1080p"]
res.set(resList[2])
OptionMenu(frame, res, *resList
           ).place(in_=frame, anchor="c", relx=.75, rely=.575)
  • 添加一个按钮开始下载过程。我将命令添加到名为“下载”的函数中,我将在其中编写其所有逻辑。如果您不知道此命令属性会做什么 - 每次单击按钮时,它都会运行提供功能。
Button(root, command=download, text="download").place(
    in_=frame, anchor="c", relx=.5, rely=.9, relheight=0.3)

您已经在按钮窗口小部件之前定义了“下载”功能,否则您将获得错误。

现在我们的应用程序看起来像这样
gui after all widgets are added


下载背后的逻辑:

首先,我会说:“我不知道有python模块称为 pytube 可以下载YouTube视频”。我阅读了有关此YouTube视频下载的帖子,使用Python由我们的一个 dev.to.to.to 朋友,并在对其进行了一些修改后使用他的代码。如果您想进一步了解这一点,我建议您阅读他的帖子。他的帖子的链接在底部给出。

  • 而不是修复下载位置,而是为用户提供一个选项,每次使用tkinter的 askDirectory widget单击下载按钮时,选择该文件夹。它将返回我存储在路径变量中的选定文件夹的路径。
    path = askdirectory(title='Select Folder')
  • 获得了路径后,我将URL存储,文件类型和视频分辨率在3个不同的变量中。
    videoLink = link.get()
    downloadType = fileType.get()
    resolution = res.get()
  • 最后设置 YouTube 类。将此部分包裹在尝试块中,以便可以轻松处理错误。我使用如果... else 来处理音频或视频下载。
video = YouTube(videoLink)

    try:
        if downloadType == "audio":
            file = video.streams.filter(only_audio=True).first()
        else:
            file = video.streams.filter(resolution=resolution).first()

        file.download(path)

    except:
        showerror("error", "Unable to download video at this time!")

    showinfo("download complete", f"{format} downloaded!")

您可以在上面的代码中看到,如果有任何问题要下载视频,它将转到 块,其中将使用 showerror显示错误弹出消息 tkinter的小部件。如果没有任何问题,则它将跳过,除了块,并且将使用 showinfo tkinter的窗口小部件显示其他流行消息。


包起来 :

您可以在此link之后在我的github上获取代码。

也只能第一次使用root.iconbitmap()。它不会第二次起作用,所以我建议您不使用此。

在这里,我使用的代码的“ shittu olumide”帖子的链接。
click here