对这个 :
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()
。
小部件实施:
让添加一些小部件,例如标签,按钮,输入小部件以使此交互式。
- 就像标题一样,在顶部添加标签,然后将其包装到根部。
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)
您已经在按钮窗口小部件之前定义了“下载”功能,否则您将获得错误。
下载背后的逻辑:
首先,我会说:“我不知道有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