241126_手把手教你使用PyQt手撸一个网易云音乐-(九)推荐页、歌单列表跳转逻辑实现
我们观察推荐页的那些歌单点进去,发现无非就是一个图加几个label加歌单列表,如下图
这界面和我们刚才做的喜欢的音乐界面差不多,我们就可以把我喜欢的音乐界面作为一个通用界面,只实现封面图的替换、label的text内容修改,歌单内容修改就ok了。
这里定义一个函数方法,我是把每个界面的label、time、info、pic_path都打包成一个字典dic然后传入进行解析的
def recommended_page_switch(self,page_info):
self.stackedWidget.setCurrentWidget(self.lkpage)
self.List_title_name.setText(page_info['label'])
self.List_title_time.setText(page_info['time'])
self.List_title_intro.setText(page_info['intro'])
# 后期更换歌单列表预留的接口
self.musicList.clear()
self.get_musicList_item()
pic_path=':/PNG/'+page_info['pic_path']
qss="border-image: url("+pic_path+");"
print(qss)
self.List_title_pic.setStyleSheet(qss)
后期可以根据自己是否想更换歌单列表去决定get_musicList_item是否传入参数file_path,也可以把path打包进dic内,自己决定就ok
然后我们定义各个歌单页的字典dic
# 各个推荐页的属性
lk_page={
'label':'我喜欢的音乐',
'intro':'这就是我喜欢的音乐',
'time':'2019-05-05',
'pic_path':'pic/lk.png'
}
daily_recommended={
'label':'每日推荐',
'intro':'每天为你推荐',
'time':str(time.strftime("%Y-%m-%d", time.localtime())),
'pic_path':'pic/feat1.png'
}
private_radar={
'label':'私人雷达',
'intro':'根据你的音乐口味推荐',
'time':'2019-05-05',
'pic_path':'pic/feat2.png'
}
private_roaming={
'label':'私人漫游',
'intro':'根据你的音乐口味推荐',
'time':'2019-05-05',
'pic_path':'pic/feat3.png'
}
daily_ballad={
'label':'民谣日推',
'intro':'民谣',
'time':'2019-05-05',
'pic_path':'pic/feat4.png'
}
mood_atmosphere={
'label':'心情日推',
'intro':'根据你的心情推荐',
'time':'2019-05-05',
'pic_path':'pic/feat5.png'
}
classic_music={
'label':'古典音乐',
'intro':'古典',
'time':'2019-05-05',
'pic_path':'pic/feat6.png'
}
cover={
'label':'[好听的翻唱Cover集]',
'intro':'翻唱Cover',
'time':'2019-05-05',
'pic_path':'pic/rec1.png'
}
wangshi={
'label':'往事做壶酒,回忆成宿醉',
'intro':'民谣',
'time':'2019-05-05',
'pic_path':'pic/rec2.png'
}
gandong={
'label':'听一首把自己感动的歌',
'intro':'感动',
'time':'2019-05-05',
'pic_path':'pic/rec3.png'
}
relax={
'label':'下班路上/戴上耳机随时可以听的放松音乐',
'intro':'放松',
'time':'2019-05-05',
'pic_path':'pic/rec4.png'
}
hearted={
'label':'超甜/心动/奔向你的路上,风都是甜的',
'intro':'心上无垢,林间有风',
'time':'2019-05-05',
'pic_path':'pic/rec5.png'
}
learning={
'label':'不吵人的看书学习音乐',
'intro':'学习',
'time':'2019-05-05',
'pic_path':'pic/rec6.png'
}
然后在init方法中绑定槽函数就ok了。对了,记得重命名
#推荐页及推荐页跳转
self.recommendedBtn.clicked.connect(lambda:self.stackedWidget.setCurrentWidget(self.recommendedpage))
self.recommendedList1.clicked.connect(lambda:self.recommended_page_switch(daily_recommended))
self.recommendedList2.clicked.connect(lambda:self.recommended_page_switch(private_radar))
self.recommendedList3.clicked.connect(lambda:self.recommended_page_switch(private_roaming))
self.recommendedList4.clicked.connect(lambda:self.recommended_page_switch(daily_ballad))
self.recommendedList5.clicked.connect(lambda:self.recommended_page_switch(mood_atmosphere))
self.recommendedList6.clicked.connect(lambda:self.recommended_page_switch(classic_music))
self.recommendedList7.clicked.connect(lambda:self.recommended_page_switch(cover))
self.recommendedList8.clicked.connect(lambda:self.recommended_page_switch(wangshi))
self.recommendedList9.clicked.connect(lambda:self.recommended_page_switch(gandong))
self.recommendedList10.clicked.connect(lambda:self.recommended_page_switch(relax))
self.recommendedList11.clicked.connect(lambda:self.recommended_page_switch(hearted))
self.recommendedList12.clicked.connect(lambda:self.recommended_page_switch(learning))
设置初始的每个stackwidget的默认页
# 各个stackwidget的初始page
self.stackedWidget.setCurrentWidget(self.recommendedpage)
self.stackedWidget_2.setCurrentWidget(self.musicpage)
到这里就ok了,可以去试试了,跳转逻辑基本是没问题的。
顺便把左侧导航栏的歌单跳转实现了把。还是那句话,我懒,所以直接把做好的歌单替换进了收藏歌单列表,然后实现跳转方法
# 歌单跳转
self.toolButton_gd1.clicked.connect(lambda: self.recommended_page_switch(cover))
self.toolButton_gd2.clicked.connect(lambda: self.recommended_page_switch(wangshi))
self.toolButton_gd3.clicked.connect(lambda: self.recommended_page_switch(gandong))
self.toolButton_gd4.clicked.connect(lambda: self.recommended_page_switch(relax))
self.toolButton_gd5.clicked.connect(lambda: self.recommended_page_switch(hearted))
self.toolButton_gd6.clicked.connect(lambda: self.recommended_page_switch(learning)
最后我们给返回上一层按钮绑定方法,这里我们无脑返回推荐页就行
self.BackspaceBtn.clicked.connect(lambda:self.stackedWidget.setCurrentWidget(self.recommendedpage))