介绍
本文是对之前的音乐播放器的一些改进和功能实现。只写了有变化的部分,具体部分请看上一篇博客。
[利用PyQt5和QSS制作本地音乐播放器(初稿)](https://blog.csdn.net/weixin_44343083/article/details/114256446)
变化展示
主界面上增加了查找歌单内歌曲的功能和点击歌单列表表头对歌单内歌曲进行排序等功能。 增加了右键重命名歌单和删除歌单功能 增加了歌曲列表右键菜单功能 增加了任务栏缩略图的功能 增加了系统任务栏右键菜单功能
变化部分功能实现思路和代码
- 歌曲查找功能
即在搜索框内输入文字,便可以触发搜索函数进行歌单搜索;搜索框内无文字时退出搜索,并恢复歌单。
self.song_search = QtWidgets.QLineEdit()
self.song_search.setPlaceholderText('搜索歌单音乐')
self.search_btn = QtWidgets.QPushButton(qtawesome.icon('fa.search'),'')
self.search_btn.setEnabled(False)
self.song_search.textChanged.connect(self.search_song)
def search_song(self, a):
self.songlist_table.setSortingEnabled(False)
if a:
items = self.songlist_table.findItems(a, Qt.MatchContains)
nRow = int(self.songlist_table.rowCount())
bRowHidden = True
for i in range(nRow):
bRowHidden = True
for item in items:
if item == None:
continue
if self.songlist_table.row(item)==i:
bRowHidden = False
break
self.songlist_table.setRowHidden(i,bRowHidden)
else:
nRow = int(self.songlist_table.rowCount())
for i in range(nRow):
self.songlist_table.setRowHidden(i, False)
self.songlist_table.setSortingEnabled(True)
self.songlist_table.sortByColumn(0, Qt.AscendingOrder)
- 歌单排序功能
即点击表头进行表格排序。 注: 每次对表格内数据进行更新时需要先将下面这个函数数值设为false,否则表格数据显示会出现错误。(不知道为什么,反正就是这样)
self.songlist_table.setSortingEnabled(True)
self.songlist_table.sortByColumn(0, Qt.AscendingOrder)
- 右键菜单
self.left_list.setContextMenuPolicy(Qt.CustomContextMenu)
self.left_list.customContextMenuRequested.connect(self.songlist_menu)
def songlist_menu(self, point):
menu = QtWidgets.QMenu()
action = menu.addAction('重命名')
action.triggered.connect(self.Rename_list)
action = menu.addAction('删除')
action.triggered.connect(self.Delete_list)
if self.left_list.currentItem() and self.left_list.itemAt(point) is not None:
menu.exec_(QCursor.pos())
- 缩略图任务栏
def setTaskbar(self):
self.taskbar = QWinThumbnailToolBar(self)
self.taskbar.setWindow(self.windowHandle())
self.taskbar_prev = QWinThumbnailToolButton()
self.taskbar_prev.setIcon(qtawesome.icon('fa.step-backward', color='#F76677'))
self.taskbar_prev.setToolTip('上一首')
self.taskbar_prev.setDismissOnClick(True)
self.taskbar_prev.clicked.connect(self.prev_song)
self.taskbar_play = QWinThumbnailToolButton()
self.taskbar_play.setIcon(qtawesome.icon('fa.play', color='#F76677'))
self.taskbar_play.setToolTip('播放')
self.taskbar_play.setDismissOnClick(True)
self.taskbar_play.clicked.connect(self.play_song)
self.taskbar_next = QWinThumbnailToolButton()
self.taskbar_next.setIcon(qtawesome.icon('fa.step-forward', color='#F76677'))
self.taskbar_next.setToolTip('下一首')
self.taskbar_next.setDismissOnClick(True)
self.taskbar_next.clicked.connect(self.next_song)
self.taskbar.addButton(self.taskbar_prev)
self.taskbar.addButton(self.taskbar_play)
self.taskbar.addButton(self.taskbar_next)
- 系统任务栏
def setQSystemTray(self):
menu=QtWidgets.QMenu()
action = menu.addAction('上一首')
action.setIcon(qtawesome.icon('fa.step-backward', color='#363636'))
action.triggered.connect(self.prev_song)
action = menu.addAction('下一首')
action.setIcon(qtawesome.icon('fa.step-forward', color='#363636'))
action.triggered.connect(self.next_song)
action = menu.addAction('退出')
action.setIcon(qtawesome.icon('fa.sign-out', color='#363636'))
action.triggered.connect(self.close)
menu.setStyleSheet('''
QMenu{
background-color:rgba(250,250,252);
font-size:18px;
color:rgb(66,66,66);
border-radius:5px;
width:200px;
}
QMenu::item{
width:198px;height:30px;
background-color:rgb(250,250,252);
border-radius:3px;
padding: 0px 0px 0px 20px;
margin:3px 3px 3px 3px;
}
QMenu::item:selected{
background-color:rgb(237,237,239);
}
''')
self.trayIcon = QtWidgets.QSystemTrayIcon()
self.trayIcon.setContextMenu(menu)
self.trayIcon.setIcon(QIcon(':/ICON/xiao.ico'))
self.trayIcon.show()
结】
感觉没改多少东西,就这点,或许有bug。
|