MyService.py
from dbUtil import Mydb
class MyService:
def __init__(self):
self.user = None
def login(self,uname,password):
sql = "select * from t_user where uname=%s and password=%s"
user = Mydb().query_one(sql,uname,password)
if user:
self.user = user
return True
else:
return False
def add_music(self,files):
for f in files:
start = f.rfind('/')+1
end = f.rfind('.mp3')
music_name = f[start:end]
#根据歌名查询数据是否有该首歌
sql = "select * from t_music where music_name=%s"
music =Mydb().query_one(sql,music_name)
if music:
#查询关联表t_list该用户是否添加了这首歌
sql = "select * from t_list where uid=%s and uid=%s"
t_list=Mydb().query_one(sql,music[0],self.user[0])
if not t_list:
sql = "insert into t_list(mid,uid) values(%s,%s)"
Mydb().exeDML(sql,music[0],self.user[0])
else:
#将音乐保存到t_music
sql = "insert into t_music(music_name,path) values(%s,%s)"
mid = Mydb().exeDML(sql,music_name,f)
#用户选择的音乐保存到t_list
sql = "insert into t_list(mid,uid) values(%s,%s)"
Mydb().exeDML(sql,mid,self.user[0])
#查询用户的音乐列表
def findListByUser(self):
sql = "select m.music_name from t_music m,t_list t where m.id and t.uid=%s"
return Mydb().query_all(sql,self.user[0])
play.py
from MyService import MyService
import tkinter
from tkinter.filedialog import askopenfilenames
class PlayWindow:
def __init__(self,myService):
self.myService = myService
self.listbox = None
#导入音乐
def impMusic(self,even):
print('导入音乐')
#打开磁盘选择音乐
files = askopenfilenames(filetypes=(['mp3','*.mp3'],))
#导入音乐,将选择的音乐保存到数据库
self.myService.add_music(files)
self.flush_list()
#查询当前用户的音乐列表
def flush_list(self):
#清空列表
self.listbox.delete(0,tkinter.END)
#查询该用户的索引音乐列表
music_list = self.myService.findListByUser()
if music_list:
for m in music_list:
self.listbox.insert(tkinter.END,m)
#播放音乐
def playMusic(self,even):
print('播放音乐')
#删除音乐
def deleteMusic(self,even):
print('删除音乐')
def showWindow(self):
#显示窗口
top = tkinter.Tk()
play_button = tkinter.Button(top,text='播放')
imp_button = tkinter.Button(top,text='导入音乐')
delete_button = tkinter.Button(top,text='删除')
play_button.grid(row=0,column=0,padx=5,pady=5)
imp_button.grid(row=0,column=2,padx=5,pady=5)
delete_button.grid(row=0,column=4,padx=5,pady=5)
#添加列表
self.listbox = tkinter.Listbox(top)
self.listbox.grid(row=1,column=0,padx=5,pady=5,columnspan=9)
#添加音乐列表
self.flush_list()
#给按钮添加事件
imp_button.bind("<ButtonRelease-1>",self.impMusic)
play_button.bind("<ButtonRelease-1>",self.playMusic)
delete_button.bind("<ButtonRelease-1>",self.deleteMusic)
top.mainloop()
if __name__ == "__main__":
uname = input('请输入用户名:')
password = input('请输入密码:')
myservice = MyService()
if myservice.login(uname,password):
print('登录成功')
playWindow = PlayWindow(myservice)
playWindow.showWindow()
else:
print('登录失败')




老师,为什么我这导入音乐,数据库里的t_list中mid是空的,而且列表中每导入一首歌,会显示多次歌曲名字