自己改良音乐下载器,有你说的状态功能,不过是类似Consle的那种,整个源码都搬过来。#导入库
import requests
import json
import tkinter as tk
from tkinter import ttk
ssagebox as msgbox
import tkinter.filedialog as filebox
from tkinter import *
import webbrowser
import time
def getPos(value,in_list):
pos=0
for i in in_list:
if i==value:
break
else:
pos+=1
return pos
def delButton(tree):
x_children()
for item in x:
tree.delete(item)
headers = {
'Host': qq',
'Referer': '/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 '
'Safari/537.36 '
}
def douqq_post(mid):
"""
返回歌曲下载url
:param mid:歌曲mid
:return: 字典
"""
post_url = '.php'
data = {'mid': mid}
res = requests.post(post_url, data=data)
get_json = json.)
return eval(get_json)
def find_song(word):
global songNames,songmid,media_mid
delButton(tree)
"""
查找歌曲
:param word: 歌曲名
:return: 返回歌曲mid
"""
get_url = '?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n'
'='()+'&w=' + word
try:
res1 = (get_url, headers=headers)
get_json = json.strip('callback()[]'))
jsons = get_json['data']['song']['list']
songNames=[]
songmid = []
media_mid = []
song_singer = []
i = 1
for song in jsons:
# print(i, ':' + song['songname'], '---', song['singer'][0]['name'], song['songmid'], song['media_mid'])
tree.insert("",i,text=str(i) ,values=(i,song['songname'],song['singer'][0]['name'])) #插入数据
songNames.append(song['songname'])
songmid.append(song['songmid'])
media_mid.append(song['media_mid'])
song_singer.append(song['singer'][0]['name'])
i = i + 1
except Exception as e:
win_print('歌曲查找函数发生错误!')
win_print(e)
def select():
for item in tree.selection():
item_text = tree.item(item,"values")
select=int(item_text[0])
#return songmid[select-1], song_singer[select-1]
song_mid=songmid[select-1]
song_name=songNames[select-1]
dic=douqq_post(song_mid)
postfix, url=choice_download(dic)
save_path=filebox.asksaveasfilename(title='保存音乐',initialfile=song_name+".m4a",filetypes=[('M4A音频文件','.m4a')])
win_print('正在将 {name} 下载到 {path} ......'.format(name=song_name,path=save_path))
download_file(url, save_path)
win_print('下载完成!')
def download_file(src, file_path):
"""
歌曲下载
:param src: 下载链接
:param file_path: 存储路径
:return: 文件路径
"""
r = (src, stream=True)
f = open(file_path, "wb")
for chunk in r.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
return file_path
def choice_download(dic):
src = dic['m4a']
postfix='.m4a'
return postfix, place('//', '//').replace('/', '/')
def search(event=''):
songname()
#song_mid, singer = find_song(songname)
find_song(songname)
def win_print(word,warn=False):
consle.insert('end',word)
consle.insert('end','n')
win.update()
if warn:
consle['fg']='red'
win.update()
time.sleep(1)
consle['fg']='green'
win.update()
win=tk.Tk()
win.title('Music Area')
win.iconbitmap("./icon.ico")
searchPart=tk.Frame(win)
nameEnter=ttk.Entry(searchPart)
nameEnter.pack(fill=tk.X)
numEnter=ttk.Entry(searchPart)
numEnter.pack(side=tk.LEFT,fill=tk.X)
numEnter.insert(tk.END,'20')
ttk.Button(searchPart,text='搜索',command=search).pack(side=tk.RIGHT)
searchPart.pack(fill=tk.X)
win.bind('',search)
tree=ttk.Treeview(win,show="headings")#表格
tree["columns"]=("序号","歌曲","艺人")
tree.heading("序号",text="序号")
tree.heading("歌曲",text="歌曲") #显示表头
tree.heading("艺人",text="艺人")
tree.pack(fill=tk.BOTH)
ttk.Button(win,text='下载',command=select).pack(fill=tk.X)
ttk.Button(win,text='By 人工智障',command=lambda:webbrowser.open("www.github/totowang-hhh/")).pack(fill=tk.X)
consle=tk.Text(win,bg='black',fg='green',font=('courier new','15'))
consle.pack(fill=tk.BOTH,padx=5)
win.update()
win_print('2020 By 人工智障')
win.mainloop()
#def down():
信息栏组建名称是consle,用Text实现,向控制台添加内容的函数是win_print(),有两个传参分别是信息内容和级别(布尔值,表示是否为紧急),目前缺点是不能自动置底。
如果一定要单行的信息栏,不要这种类似Consle的界面,用Label或者Button做都可以的。如果用Label,记得改bg参数便于和背景区分。如果用Button,可以把command参数设成一个详细信息界面或者历史信息界面。
动态更改单行信息栏直接用component_name['text']='yourtext'(伪代码)即可。
例如用Button:#导入库、创建窗口
imoport tkinter as tk
win=tk.Tk()
#详细信息窗口
def info():
info_win=tk.Tk()
info_win.title('详细信息')
#···
#创建状态栏
msg=tk.Button(win,text='状态',command=info)
msg.pack()
#更改状态为“完成”
button['text']='完成'
本文发布于:2024-02-04 13:29:49,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170708359155999.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |