python怎么放音乐_如何用python实现一个音乐播放器?

# -*- coding: utf-8 -*-

# @Time : 2018/3/28 11:58

# @Author : Song_Nan

# @Email : 910976007@qq.com

# @Software: PyCharm

import sys,glob

import Queue,time

import shelve,json

import requests,os,random

import codecs,Queue,mp3play

import gevent,threading

from Tkinter import *

from gevent import monkey

from lxml import etree

from PIL import Image, ImageTk

#类网页内容查找

class Html_Xpath():

def __init__(self,url):

self.html=r'Not Find'

self.headers=dict()

self.info=dict()

self.headers['User-Agent']= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'

try:

req=requests.get(url,headers=self.headers,timeout=5)

req.encoding='utf-8'

if req.status_code==200:

self.html=etree.HTML(req.text)

else:return self.html

except requests.ConnectionError:return self.html

except requests.ConnectTimeout:return self.html

except requests.exceptions.ReadTimeout:return self.html

def xpathstr(self,xpathstr=''):

xpathlist=[]

try:

xpathlist=self.html.xpath(xpathstr)

if xpathlist==[]:

xpathlist= self.html.xpath('*//text()')[0]

print xpathlist

return xpathlist

except etree.XPathDocumentEvaluator:return xpathlist

except etree.XPathElementEvaluator:return xpathlist

except etree.XPathError:return xpathlist

except etree.XPathFunctionError:return xpathlist

except UnicodeEncodeError:return xpathlist

#类:数据库操作

class Shelve():

#参数引用数据库路径,并进行初始化操作

def __init__(self,shelve_file_name):

#公共属性接受数据库路径

self.shelve_file_name=shelve_file_name

#判断数据库文件是否存在:存在跳过,不存在创建新的数据库

file_dir = os.path.split(self.shelve_file_name)[0]

if not os.path.isdir(file_dir):

os.makedirs(file_dir)

if not os.path.exists(self.shelve_file_name):

os.system(r'touch %s' % self.shelve_file_name)

pickle_file = shelve.open(self.shelve_file_name, writeback=True)

pickle_file.close()

return

#数据库字段功能

#

#增,改

def add_items(self,items,key={}):

File_shelve = shelve.open(self.shelve_file_name, writeback=True)

File_shelve[items]=key

File_shelve.close()

return True

#删

def delete_items(self,items):

File_shelve = shelve.open(self.shelve_file_name, writeback=True)

#判断参数是否存在于数据库,存在:进行删除操作,不存在返回False

if File_shelve.has_key(items):

del File_shelve[items]

return_list = True

else:return_list=False

File_shelve.close()

return return_list

#查

def inquire_items(self,items):

File_shelve = shelve.open(self.shelve_file_name, flag='r')

# 判断参数是否存在于数据库,存在:进行查询操作,不存在返回None

if items in File_shelve.keys():

return_lsit=File_shelve[items]

else:return_lsit=None

File_shelve.close()

return return_lsit

#数据库字段下功能

#增,改

def add_items_key(self,items,key,value=''):

File_shelve = shelve.open(self.shelve_file_name, writeback=True)

File_shelve[items][key] =value

File_shelve.close()

return True

#删

def delete_items_key(self,items,key):

File_shelve = shelve.open(self.shelve_file_name, writeback=True)

if File_shelve.has_key(items)==True:

del File_shelve[items][key]

File_shelve.close()

return True

#查

def inquire_items_key(self,items,key):

File_shelve = shelve.open(self.shelve_file_name, flag='r')

# 判断参数items是否存在于数据库,存在:继续判断key,不存在返回None

if File_shelve.has_key(items)==True:

# 判断参数key是否存在于数据库items条目内,存在:返回数据,不存在返回None

if key in File_shelve[items]:

return_list=File_shelve[items][key]

else:return_list=None

else:return_list=None

File_shelve.close()

return return_list

#在线歌曲信息查找,返回字典格式数据(包含歌曲专辑图片网址,发行时间,歌唱者)---(资源引用QQ音乐)

#变量TEXT为搜索歌曲名称

class web_Song_Search():

def __init__(self,TEXT):

url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?'

data={'ct':'24','qqmusic_ver':'1298','new_json':'1','remoteplace':'txt.yqq.center','searchid':'47353711014539436','t':'0','aggr':'1','cr':'1','catZhida':'1','lossless':'0','flag_qc':'0','p':'1','n':'20','w':r'%E7%A9%BA%E7%A9%BA','g_tk':'5381','jsonpCallback':'MusicJsonCallback08562790864064684','loginUin':'0','hostUin':'0','format':'jsonp','inCharset':'utf8','outCharset':'utf-8','notice':'0','platform':'yqq','needNewCode':'0'}

data['w']=TEXT

self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}

re=requests.get(url,headers=self.headers,params=data)

a=re.text.lstrip('MusicJsonCallback08562790864064684(').strip(')')

self.b=json.loads(a)

try:

Song_dict=self.b['data']['song']['list'][0]

self.url='https://y.qq.com/n/yqq/song/{}.html'.format(Song_dict['mid'])

except IndexError: self.url=None

return

def down(self):

if self.url==None:

song_name = 'None'

song_songer = 'None'

song_albums_name = 'None'

song_pic_url = 'None'

song_dict = {'song_pic_url': song_pic_url, 'song_name': song_name, 'song_songer': song_songer,'song_albums_name': song_albums_name}

return song_dict

else:

try:

html=Html_Xpath(self.url)

song_name=html.xpathstr('/html/body/div[2]/div[1]/div/div[1]/h1/@title')

song_songer=html.xpathstr('/html/body/div[2]/div[1]/div/div[2]/a/@title')

song_albums_name =html.xpathstr('/html/body/div[2]/div[1]/div/ul/li[1]/a/@title')

song_pic_url=html.xpathstr('/html/body/div[2]/div[1]/span/img/@src')

self.pic_url=song_pic_url[0]

self.song_dict={'song_pic_url':song_pic_url[0],'song_name':song_name[0], 'song_songer':song_songer[0], 'song_albums_name':song_albums_name[0]}

except TypeError:

song_name='None'

song_songer='None'

song_albums_name ='None'

song_pic_url='None'

self.pic_url=song_pic_url

self.song_dict={'song_pic_url':song_pic_url,'song_name':song_name, 'song_songer':song_songer, 'song_albums_name':song_albums_name}

return self.song_dict

# 类:图形界面构造,及功能函数绑定,待开发

class Application(object):

# 类构造函数

def __init__(self, object):

#变量初始化

#FLOG,播放线程结束标志符

self.flog =True

self.flog1 = False

#播放列表

self.mp3_song_list=list()

#播放列表映射

self.mp3_dict=dict()

#播放列表索引,用于上下曲播放

self.i=-1

self.song=''

# 创建容器Frame:

#面板容器创建

self.Frame_play = LabelFrame(object, width=220, height=90, text='播放台')

self.Frame_list=LabelFrame(object, width=350, height=270, text='歌曲列表')

self.Frame_pic = LabelFrame(object, width=350, height=90, text='歌曲信息')

self.Frame_lrc = LabelFrame(object, width=200, height=270, text='歌曲歌词')

# 容器下部件创建

self.Frame_play_CreateWidgets()

self.Frame_list_CreateWidgets()

self.Frame_pic_CreateWidgets()

self.Frame_lrc_CreateWidgets()

# 容器布局:

self.Frame_play.grid(row=0, column=0,padx=5, pady=5)

self.Frame_list.grid(rows=1, column=0, padx=5, pady=5)

self.Frame_pic.grid(row=0,column=1 , pady=5, padx=5)

self.Frame_lrc.grid(row=1, column=1, pady=5, padx=5)

self.updata_list()

self.Mp3_Pic_Updata()

self.Lrc_updata()

return

# 方法:容器创建部件及界面功能绑定

#播放功能及进度条区域部件创建(进度条区域功能未开发完毕)

def Frame_play_CreateWidgets(self):

#上层播放按钮区域

self.up_playbuttun=Button(self.Frame_play, text='上一曲', height=1,width=6,command=self.up_play, font=("Times", 8))

self.playbuttun=Button(self.Frame_play, text='停止',height=1,command=self.stop_play,width=6, font=("Times", 9))

self.down_playbuttun=Button(self.Frame_play, text='下一曲',height=1,width=6, command=self.down_play, font=("Times", 8))

self.up_playbuttun.grid(row=2,rowspan=3 ,column=5,columnspan=3, sticky=S, padx=10, pady=15)

self.down_playbuttun.grid(row=1,rowspan=5, column=10, columnspan=5,sticky=S, padx=10, pady=15)

self.playbuttun.grid(row=2,rowspan=3, column=15,columnspan=3, sticky=S,padx=10, pady=15)

#下层进度条区域

self.Progress_bar=Canvas(self.Frame_play,width=180, height=20,bg='#EEEEEE')

self.Progress_bar.create_rectangle(0, 16, 180, 20, fill="red", width=4)

self.Progress_bar.create_text(3, 7, text='00:00:00', font=("Times", 8), anchor=W, fill='red')

self.Progress_bar.create_text(135, 7, text='00:00:00', font=("Times", 8), anchor=W, fill='red')

self.Progress_bar.grid(row=6,rowspan=2, column=0,columnspan=20, sticky=S, padx=10, pady=11)

return

#歌曲播放方法(传入参数:播放音乐路径)

def Song_play(self,file_name):

def play(i):

self.hh=0

time_now="00:00:00|00:00:00"

try:

Voice_play = mp3play.load(file_name)

Voice_play.play()

start_time=time.time()

mp3_time=self.seconds_toMinutes_and_seconds(Voice_play.seconds())

bb=180/float(Voice_play.seconds())

play_time=0

while True:

time.sleep(0.5)

play_time = time.time() - start_time

self.hh = int(int(play_time) * bb)

if play_time>Voice_play.seconds():

play_time=Voice_play.seconds()

play_now_time = self.seconds_toMinutes_and_seconds(play_time)

time_now = ' | '.join([play_now_time, mp3_time])

self.Progress_bar_updata(time_now)

if play_time>Voice_play.seconds or self.flog == True:

self.Progress_bar_updata("00:00:00|00:00:00")

self.flog = False

return

except ValueError:

self.flog = False

self.Progress_bar_updata("00:00:00|00:00:00")

print '播放失败'

My_Thread = threading.Thread(target=play, args=(1,))

My_Thread.setDaemon(False)

My_Thread.start()

self.flog = False

return

#上一曲播放

def up_play(self):

if self.i<0:

self.i=self.mp3list.size()

self.i -= 1

if self.flog1==True:

self.i=random.randint(0,self.mp3list.size())

self.hh = 0

self.flog=True

self.mp3list.select_set(self.i)

self.mp3list.select_clear(self.i-1)

self.mp3_name=self.mp3list.get(self.i)

self.Mp3_name_Updata(self.mp3_name)

sh = Shelve('F:\mp3\Shelve\mp3_shelve.db')

a=self.song_file_name=sh.inquire_items_key(self.mp3_name,'File')

print self.mp3_name,a,self.song_file_name

self.Mp3_Information_songer(sh.inquire_items_key(self.mp3_name,'song_songer'))

self.Mp3_Information_albums(sh.inquire_items_key(self.mp3_name,'song_albums_name'))

self.Mp3_Pic_Updata(sh.inquire_items_key(self.mp3_name,'song_pic_file'))

print sh.inquire_items_key(self.mp3_name, 'lrc_file')

self.Lrc_updata(sh.inquire_items_key(self.mp3_name,'lrc_file'))

time.sleep(1.4)

self.Song_play(self.song_file_name)

return

#下一曲播放

def down_play(self):

if self.i>self.mp3list.size():self.i=-1

self.i += 1

if self.flog1==True:

self.i=random.randint(0,self.mp3list.size())

self.hh = 0

self.flog=True

self.mp3list.select_set(self.i)

self.mp3list.select_clear(self.i-1)

self.mp3_name=self.mp3list.get(self.i)

self.Mp3_name_Updata(self.mp3_name)

sh = Shelve('F:\mp3\Shelve\mp3_shelve.db')

self.song_file_name=sh.inquire_items_key(self.mp3_name,'File')

self.Mp3_Information_songer(sh.inquire_items_key(self.mp3_name,'song_songer'))

self.Mp3_Information_albums(sh.inquire_items_key(self.mp3_name,'song_albums_name'))

self.Mp3_Pic_Updata(sh.inquire_items_key(self.mp3_name,'song_pic_file'))

print sh.inquire_items_key(self.mp3_name, 'lrc_file')

self.Lrc_updata(sh.inquire_items_key(self.mp3_name,'lrc_file'))

time.sleep(1.4)

self.Song_play(self.song_file_name)

return

#随机播放设置

def tt(self):

self.flog1=True

return

#顺序播放设置

def tt1(self):

self.flog1=False

return

#停止播放

def stop_play(self):

self.flog = True

return

#列表框双击播放nag

def list_play(self,event):

self.hh = 0

self.flog=True

sh = Shelve('F:\mp3\Shelve\mp3_shelve.db')

self.song_name = self.mp3list.get(self.mp3list.curselection())

self.i=self.mp3list.curselection()[0]

self.song_file_name=sh.inquire_items_key(self.song_name,'File')

self.Mp3_name_Updata(self.song_name)

self.Mp3_Information_songer(sh.inquire_items_key(self.song_name,'song_songer'))

self.Mp3_Information_albums(sh.inquire_items_key(self.song_name,'song_albums_name'))

self.Mp3_Pic_Updata(sh.inquire_items_key(self.song_name,'song_pic_file'))

print sh.inquire_items_key(self.mp3_name, 'lrc_file')

self.Lrc_updata(sh.inquire_items_key(self.mp3_name, 'lrc_file'))

time.sleep(2)

self.Song_play(self.song_file_name)

return

#播放时间转换(秒转化为时分秒形式:h:m:s),用于刷新进度条播放进度显示已播放时间

def seconds_toMinutes_and_seconds(self,seconds):

if type(seconds)==type(int(0)):

m, s = divmod(seconds, 60)

h, m = divmod(m, 60)

else:

m, s = divmod(int(seconds), 60)

h, m = divmod(m, 60)

return "%02d:%02d:%02d" % (h, m, s)

#播放进度条更新

def Progress_bar_updata(self,text):

def updata(i):

time1=text.split('|')[0]

time2=text.split('|')[1]

if self.hh>180:

self.hh=180

self.Progress_bar.create_rectangle(0, 0, 300, 25, fill='#EEEEEE')

self.Progress_bar.grid(row=6, rowspan=2, column=0, columnspan=20, sticky=S, padx=10, pady=10)

self.Progress_bar.create_text(3, 7, text=time1, font=("Times", 8), anchor=W, fill='blue')

self.Progress_bar.grid(row=6, rowspan=2, column=0, columnspan=20, sticky=S, padx=10, pady=10)

self.Progress_bar.create_text(135, 7, text=time2, font=("Times", 8), anchor=W, fill='red')

self.Progress_bar.grid(row=6, rowspan=2, column=0, columnspan=20, sticky=S, padx=10, pady=10)

self.Progress_bar.create_rectangle(0, 16, 180, 20, fill="red", width=4)

self.Progress_bar.grid(row=6, rowspan=2, column=0, columnspan=20, sticky=S, padx=10, pady=10)

self.Progress_bar.create_line(4, 18, self.hh, 18, fill="green", width=4)

self.Progress_bar.grid(row=6, rowspan=2, column=0, columnspan=20, sticky=S, padx=10, pady=10)

return

updata(1)

return

#歌曲列表区域部件创建

def Frame_list_CreateWidgets(self):

self.var=StringVar()

#歌词列表

self.buttun1=Button(self.Frame_list, text='随机播放', height=1,width=10,command=self.tt, font=("Times", 8))

self.buttun2 = Button(self.Frame_list, text='顺序播放', height=1, width=10, command=self.tt1, font=("Times", 8))

self.mp3list=Listbox(self.Frame_list,listvariable = self.var,width=30, height=16)

self.mp3list.grid(row=1, columnspan=4, sticky=S, padx=9, pady=2)

self.mp3list.bind('',self.list_play)

self.buttun1.grid(row=0, column=2, sticky=S, padx=9, pady=2)

self.buttun2.grid(row=0, column=3, sticky=S, padx=9, pady=2)

return

#歌曲列表框数据插入(参数:列表形式数据)

def add_item1(self,song_list):

for itmes in song_list:

self.mp3list.insert(song_list.index(itmes),itmes)

return

#播放列表初始化

def updata_list(self):

mp3_list=[]

for file_name in glob.glob(r'F:\mp3\mp3\*.mp3'):

mp3_name = file_name.split('\\')[-1]

mp3_list.append(mp3_name)

for items in mp3_list:

self.mp3list.insert(mp3_list.index(items),items)

return

#歌曲图片及详情区域部件创建(详情功能未开发完毕)

def Frame_pic_CreateWidgets(self):

#歌曲详情

#左侧区域:图片

self.mp3_pic=Canvas(self.Frame_pic,width=80, height=80,bg='#EEEEEE')

self.mp3_pic.grid(row=1,rowspan=7, column=0, sticky=S, padx=10, pady=10)

#右侧区域:信息

self.mp3_name_Canvas = Canvas(self.Frame_pic, width=215, height=15, bg='#EEEEEE')

self.mp3_name_Canvas.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_name_Canvas.create_text(2, 11, text='歌曲名称:', font=("Times", 8), anchor=W, fill='red')

self.mp3_name_Canvas.grid(row=1, column=2, sticky=S, padx=5, pady=10)

self.mp3_songer = Canvas(self.Frame_pic, width=215, height=15, bg='#EEEEEE')

self.mp3_songer.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_songer.create_text(2, 11, text='演唱者:', font=("Times", 8), anchor=W, fill='red')

self.mp3_songer.grid(row=2, column=2, sticky=S, padx=5, pady=1)

self.mp3_albums = Canvas(self.Frame_pic, width=215, height=15, bg='#EEEEEE')

self.mp3_albums.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_albums.create_text(2, 11, text='专辑信息:', font=("Times", 8), anchor=W, fill='red')

self.mp3_albums.grid(row=3, column=2, sticky=S, padx=5, pady=1)

return

#歌曲图片刷新(后期引入本Mp3_Pic_Updata地数据库内容,动态加载图片,预留参数self.Pic_File,图片地址)

def Mp3_Pic_Updata(self,path=r'F:\mp3\pic\not_pic.jpg'):

global im

image = Image.open(path)

print_image = image

image.thumbnail((80, 80))

im = ImageTk.PhotoImage(image)

self.mp3_pic.create_image(42, 42, image=im)

self.mp3_pic.grid(row=1,rowspan=7, column=0, sticky=S, padx=10, pady=10)

return

#播放歌曲详细信息更新

def Mp3_Information_songer(self,text):

def updata2(i):

self.mp3_songer.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_songer.grid(row=2, column=2, sticky=S, padx=5, pady=1)

self.mp3_songer.create_text(2, 11, text='演唱者:'+text, font=("Times", 8), anchor=W, fill='red')

self.mp3_songer.grid(row=2, column=2, sticky=S, padx=5, pady=1)

return

My_Thread=threading.Thread(target=updata2,args=(1,))

My_Thread.start()

return

#歌曲名称刷新(参数text,打印参数值到画布,后期引用数据库歌曲名称信息接口)

def Mp3_name_Updata(self,text):

def updata(i):

title=text.split('.')[0]

self.mp3_name_Canvas.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_name_Canvas.grid(row=1, column=2, sticky=S, padx=5, pady=10)

self.mp3_name_Canvas.create_text(2, 11, text='歌曲名称:'+title, font=("Times", 8), anchor=W, fill='red')

self.mp3_name_Canvas.grid(row=1, column=2, sticky=S, padx=5, pady=10)

return

My_Thread=threading.Thread(target=updata,args=(1,))

My_Thread.start()

return

#播放详细信息:专辑名称更新

def Mp3_Information_albums(self, text):

def updata1(i):

self.mp3_albums.create_rectangle(0, 0, 250, 20, fill='#EEEEEE')

self.mp3_albums.grid(row=3, column=2, sticky=S, padx=5, pady=1)

self.mp3_albums.create_text(2, 11, text='专辑信息:'+text, font=("Times", 8), anchor=W, fill='red')

self.mp3_albums.grid(row=3, column=2, sticky=S, padx=5, pady=1)

return

My_Thread = threading.Thread(target=updata1, args=(1,))

My_Thread.start()

return

#歌曲歌词显示区域部件创建(待开发)

def Frame_lrc_CreateWidgets(self):

#歌词面板

self.lrc=Listbox(self.Frame_lrc,width=51, height=18, bg='#EEEEEE')

self.lrc.grid(row=0, column=0, sticky=S, padx=10, pady=1)

return

def Lrc_updata(self,file=r'F:\mp3\lrc\1.lrc'):

lrc_list=list()

with open(file,'rb') as f:

for line in f:

a=line

lrc_list.append(a)

self.lrc.delete(0, END)

for i in range(len(lrc_list)):

self.lrc.insert(i,lrc_list[i])

def frist():

sh = Shelve('F:\mp3\Shelve\mp3_shelve.db')

for file_name in glob.glob(r'F:\mp3\mp3\*.mp3'):

mp3_name = file_name.split('\\')[-1]

key = mp3_name

Song_Search = web_Song_Search(key)

Search_song_html_list = Song_Search.down()

if sh.inquire_items(key) == None:

sh.add_items(key)

sh.add_items_key(key, 'File', file_name)

sh.add_items_key(key, 'mp3_name', mp3_name)

if sh.inquire_items_key(key,'song_pic_url')==None:

value=Search_song_html_list['song_pic_url']

value=value.encode('utf-8')

print value

sh.add_items_key(key,'song_pic_url',value)

if sh.inquire_items_key(key,'song_name')==None:

value=Search_song_html_list['song_name']

value=value.encode('utf-8')

print value

sh.add_items_key(key,'song_name',value)

if sh.inquire_items_key(key,'song_songer')==None:

value=Search_song_html_list['song_songer']

value=value.encode('utf-8')

print value

sh.add_items_key(key,'song_songer',value)

if sh.inquire_items_key(key,'song_albums_name')==None:

value=Search_song_html_list['song_albums_name']

value=value.encode('utf-8')

print value

sh.add_items_key(key,'song_albums_name',value)

if sh.inquire_items_key(key,'lrc_file')==None:

lrc_file=lrc_down(key,sh.inquire_items_key(key,'song_name'))

sh.add_items_key(key, 'lrc_file', lrc_file)

if sh.inquire_items_key(key,'song_pic_file')==None:

path=r'F:\mp3\pic\{}.jpg'.format(mp3_name.strip('.mp3'))

if Search_song_html_list['song_pic_url'] != 'None':

url=Search_song_html_list['song_pic_url']

Pic_Content = requests.get('https:' + url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}).content

print path

try:

with open(path, 'wb') as f:

f.write(Pic_Content)

f.flush()

f.close()

except IOError:path=r'F:\mp3\pic\not_pic.jpg'

else:path=r'F:\mp3\pic\not_pic.jpg'

sh.add_items_key(key, 'song_pic_file', path)

return

def lrc_down(key,text):

te = text.replace(' ', '+')

sh = Shelve('F:\mp3\Shelve\mp3_shelve.db')

url = 'http://www.xiami.com/search/?&key={}'.format(te)

try:

a = Html_Xpath(url)

b = a.xpathstr('//*[@id="wrapper"]/div[2]/div[1]/div/div[2]/div[1]/div[1]/table/tbody/tr[1]/td[2]/a/@href')

c = Html_Xpath(b[0])

D = c.xpathstr('//*[@id="lrc"]//text()')

lrc_file ='F:\mp3\lrc\{}.lrc'.format(text)

with codecs.open(lrc_file , 'wb', encoding='utf-8') as f:

for i in D[:-2]:

if i in ['\n', '\r\n', '']:

pass

else:

f.write(i.replace('\n', '') + '\n')

f.flush()

except requests.RequestException:

lrc_file = r'F:\mp3\lrc\no.lrc'

return lrc_file

#数据库刷新

#frist()

#程序启动

ROOT=Tk()

###################

app = Application(ROOT)

# 设置窗口标题:

ROOT.title('音乐播放器')

#设置图标

#ROOT.iconbitmap('F:\mp3\pic\ico.ico')

# 设置窗口大小:

ROOT.geometry('570x400')

# 设置窗口大小(不可变):

ROOT.resizable(width=False, height=False)

# 主消息循环:

ROOT.mainloop()

###############################################

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值