利用PyQt5制作本地音乐播放器

该博客介绍了使用PyQt5和QSS对本地音乐播放器的改进,增加了搜索歌单内歌曲、歌单排序、右键菜单(重命名和删除歌单、歌曲列表操作)以及任务栏缩略图和系统任务栏菜单功能。详细阐述了各项功能的实现思路和关键代码。
摘要由CSDN通过智能技术生成

介绍

本文是对之前的音乐播放器的一些改进和功能实现。只写了有变化的部分,具体部分请看上一篇博客。
[利用PyQt5和QSS制作本地音乐播放器(初稿)](https://blog.csdn.net/weixin_44343083/article/details/114256446)

变化展示

主界面上增加了查找歌单内歌曲的功能和点击歌单列表表头对歌单内歌曲进行排序等功能。
整体
增加了右键重命名歌单和删除歌单功能
歌单右键
增加了歌曲列表右键菜单功能
歌曲右键
增加了任务栏缩略图的功能
任务栏缩略图
增加了系统任务栏右键菜单功能
工具栏右键

变化部分功能实现思路和代码

  1. 歌曲查找功能
    即在搜索框内输入文字,便可以触发搜索函数进行歌单搜索;搜索框内无文字时退出搜索,并恢复歌单。
	# 控件设置和事件触发
	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)
  1. 歌单排序功能
    即点击表头进行表格排序。
    注: 每次对表格内数据进行更新时需要先将下面这个函数数值设为false,否则表格数据显示会出现错误。(不知道为什么,反正就是这样)
self.songlist_table.setSortingEnabled(True)	#这里设置为true即可实现
self.songlist_table.sortByColumn(0, Qt.AscendingOrder)
  1. 右键菜单
    #	事件触发
    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())
  1. 缩略图任务栏
    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)
  1. 系统任务栏
    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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值