使用 Python Tkinter 制作 YouTube 视频下载器

17 Mar 2025 | 阅读 17 分钟

YouTube 被认为是最受观看的视频流媒体网站之一。YouTube 是一个于 2005 年推出的在线视频平台,提供各种各样的内容,包括教育视频、娱乐内容、电视剪辑、音乐和游戏视频等等。

缓慢的互联网连接可能会在在线播放视频时造成困难。借助 YouTube 视频下载器应用程序,我们可以在个人电脑或智能手机上下载视频。这样,我们就可以随时观看视频,而不会出现烦人的缓冲图标。

在接下来的教程中,我们将学习如何使用 Python 编程语言中的 Tkinterpytube 库来开发一个下载 YouTube 视频的 GUI 应用程序。

但在我们开始构建项目之前,让我们先看看项目的先决条件。

项目先决条件

在 Python 中创建 GUI YouTube 视频下载器时,我们需要一些库。这些库简要描述如下:

  1. Tkinter:Tkinter 库将允许我们为应用程序提供图形用户界面(GUI)。
  2. Pytube:pytube 库是一个轻量级、无依赖的 Python 库,它允许我们从网络上下载视频。
  3. Pillow:Pillow 库是 Python 图像处理库,它允许我们为 Python 解释器添加图像处理能力。

由于 Tkinter 库随 Python 预装,因此无需额外安装。但是,我们可以通过在命令提示符或终端中输入以下命令,使用 PIP 安装程序来安装 pytubePillow (PIL) 库。

语法

安装完成后,我们可以通过创建一个新的 python 程序文件并导入 pytubepillow (PIL) 模块来验证 pillow 库是否已正确安装。

以下是说明相同内容的代码片段。

文件:verify.py

现在,让我们保存文件并在命令提示符或终端中运行以下命令。

语法

如果程序没有返回任何导入错误,则表示库已成功安装。如果引发任何异常,请尝试重新安装这些库并考虑查阅它们的官方文档。

现在让我们开始构建项目。

在 Python 中使用 Tkinter 构建 YouTube 视频下载器

为了更好地理解,我们将创建 Python YouTube 视频下载器的完整项目代码分成了几个步骤。这些步骤如下所示:

步骤 1: 导入必要的模块

第 2 步:定义下载视频所需的函数。

步骤 3: 创建应用程序的主窗口。

步骤 4:向窗口添加必要的控件并设置事件触发器。

让我们更详细地了解上述步骤。

导入必要的模块

首先,我们将导入所有必需的模块,包括来自 tkinter 模块的所有小部件和模块、来自 pytube 库的 YouTube 类以及来自 PIL 库的 ImageImageTk 模块。

让我们考虑以下说明相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们从 tkinter 模块导入了所有的小部件和模块。我们从 tkinter 模块导入了 messageboxfiledialog 模块。然后我们从 pytube 模块导入了 YouTube 类。最后,我们从 PIL 模块导入了 ImageImageTk 模块。

定义用于操作应用程序中数据的函数

现在我们已经成功导入了必要的模块,是时候定义一些函数了。我们将定义不同的函数来浏览文件夹、下载视频、重置输入项和关闭应用程序。

让我们详细了解这些函数的实现。

浏览文件夹的函数

我们将定义一个函数来选择将要下载所选视频的目标文件夹。为此,我们将使用 filedialog 模块的 askdirectory() 方法来选择目录。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们定义了一个名为 browse_folder() 的函数。在该函数内部,我们使用了 Tkinter 库的 filedialog 模块的 askdirectory() 方法来选择文件将要下载的目录。然后我们使用 set() 方法在输入字段中设置目录路径。

将视频下载到指定路径的函数

我们现在将定义一个函数,该函数使用 pytube 库的 YouTube 类来下载所需的视频。

让我们考虑以下演示相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们定义了一个名为 download_video() 的函数。在该函数中,我们使用了 get() 方法来检索存储在 StringVar 类对象中的值。然后我们使用 if-else 条件语句来检查检索到的值是否有任何一个不是空字符串。接着我们使用从输入字段中检索到的 URL 创建了 YouTube 类的一个对象。然后我们使用了 YouTube 类的 filter() 方法来选择文件扩展名为 'mp4'、progressive 等于 Trueitag 等于 22 的流,以便下载 720p 分辨率的视频。然后我们使用 download() 方法来选择指定文件夹以下载视频。接着我们使用了 Tkinter 库的 messagebox 模块的 showinfo() 方法来显示一个表示下载成功的消息。如果任何输入字段为空,我们使用 messagebox 模块的 showerror() 方法显示一个指示字段为空的错误消息。

重置输入项的函数

我们现在将定义一个函数来重置输入字段中填写的内容。

让我们考虑以下说明相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们定义了一个名为 reset() 的函数。在该函数中,我们使用了 set() 方法将输入字段的值设置为空字符串。然后我们使用 focus_set() 方法将光标焦点设置到第一个输入字段。

关闭应用程序的函数

我们现在将定义一个函数来关闭应用程序。

让我们考虑以下说明相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们定义了一个名为 exit() 的函数。在该函数中,我们使用了 destroy() 方法以及 Tk() 类的对象来关闭应用程序。

创建应用程序的主窗口

现在我们已经定义了所有操作用户数据的必要函数,是时候创建将添加小部件的主窗口了。我们将使用 tkinter 模块的 Tk() 类来创建窗口。我们还将设置标题、大小、位置、背景颜色和图标。

让我们考虑以下说明相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们通过将 Tk() 类实例化为 gui_root 创建了主窗口。然后,我们使用 title() 方法设置了窗口的标题。我们还使用 geometry() 方法设置了窗口的大小和位置,并通过将 resizable() 方法的参数值设置为 0 来禁用可调整大小的选项,以获得更好的 UI。我们借助 config() 方法配置了窗口的背景颜色。最后,我们使用 iconbitmap() 方法设置了窗口的图标。

向窗口添加必要的控件并设置事件触发器

由于应用程序的主窗口已成功创建,我们将向窗口添加所有必要的控件并设置事件触发器。这些控件包括用于构建其他控件的框架、用于显示重要信息的标签、用于插入数据的输入字段以及用于操作输入数据和调用函数的按钮。

现在让我们详细了解这些控件的添加。

添加框架

我们将首先向主窗口添加框架。这些框架将有助于构建其他控件。可以使用 tkinter 模块的 Frame() 控件创建这些框架。

让我们考虑以下演示相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们使用了 Frame() 小部件向窗口添加了框架。我们还将这些小部件的 master 参数分别设置为 gui_root。我们通过将其设置为 bg 参数的值来配置背景颜色。最后,我们使用了 pack() 方法来设置这些框架的位置。

向 header_frame 框架添加小部件

我们现在将向此框架添加显示标题和图像的标签。我们将使用 Label() 小部件添加标签。我们还将使用 PIL 库的 ImageTkImage 模块从目录中导入图像,并使其与 Tkinter 应用程序兼容。

让我们考虑以下说明相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们使用了 ImageTk 模块的 PhotoImage() 方法。在该方法中,我们使用了 Image 模块的 open() 方法从目录中导入图像文件。我们还使用了 resize() 方法来调整导入的图像大小,并将其转换为可在 Tkinter 应用程序中兼容使用的格式。然后我们使用了 Label() 小部件来创建一些标签以显示导入的图像和标题。我们将这些标签的 master 参数设置为 header_frame 框架。最后,我们使用了 grid() 方法以网格格式设置这些标签的位置。

向 entry_frame 框架添加小部件

我们现在将向 entry_frame 框架添加一些小部件。这些小部件包括一些标签、输入字段和一个按钮。我们将使用 Label() 小部件创建显示重要信息的标签。然后我们将使用 Entry() 小部件创建输入字段,供用户填写所要求的数据。我们还将使用 Button() 小部件创建一个按钮,允许我们浏览目录。

让我们考虑以下演示相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们使用 Label() 小部件添加了一些标签,并将其 master 参数设置为 entry_frame 框架。然后我们使用 grid() 方法在窗口上以网格格式设置这些标签的位置。接着我们使用 Entry() 小部件添加了一些输入字段,并将其 master 参数设置为 entry_frame 框架。我们再次使用 grid() 方法以网格格式设置这些字段的位置。最后,我们借助 Button() 小部件添加了一个按钮,并将其 master 参数设置为 entry_frame 框架。我们再次使用 grid() 方法以网格格式设置此按钮的位置。

向 button_frame 框架添加小部件

我们现在将向此框架添加必要的按钮。我们将使用 Button() 框架向应用程序添加按钮,这些按钮将允许用户在他们想要的目录中下载请求的视频、重置输入项以及关闭应用程序。

让我们考虑以下演示相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们使用了 Button() 小部件向应用程序添加了按钮,并将 master 参数设置为 button_frame 框架。然后我们将这些小部件的 command 参数设置为我们之前定义的函数。最后,我们使用了 grid() 方法以网格格式设置这些按钮的位置。

运行应用程序

我们现在将使用 mainloop() 方法和 Tk() 类的对象来运行应用程序。

让我们考虑以下演示相同内容的代码片段。

文件: youTubeDownloader.py

说明

在上面的代码片段中,我们使用 mainloop() 方法和 Tk() 类的对象 gui_root 来运行应用程序。

因此,项目代码现在已完成。我们将保存此 python 程序文件并在命令提示符或终端中运行以下命令以查看输出。

语法

但在我们看到输出之前,下面显示了“使用 Tkinter 的 YouTube 视频下载器”的完整项目代码。

完整的项目代码

以下是“在 Python 中使用 Tkinter 的 YouTube 视频下载器”的项目代码。

文件: youTubeDownloader.py

输出

YouTube Video Downloader using Python Tkinter