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

2023-10-27

介绍

本文是对之前的音乐播放器的一些改进和功能实现。只写了有变化的部分,具体部分请看上一篇博客。
[利用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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用PyQt5制作本地音乐播放器 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 如何在同一台计算机上安装多个Java版本

    一段时间以前 我写了一篇文章 用示例解释Java Lambda表达式 但是我很容易浏览Java 8 因为我在项目中使用了Java 8 并且允许我安装和使用它 但是在我当前的项目中 我们仍在使用Java 8 现在我想升级自己并学习Java 1
  • CC254X 蓝牙博文收集

    BLE CC2541之添加特征值 BLE CC2541之发现多个特征值句柄 BLE CC2541之配对与绑定 CC2640R2F之配对绑定与解除绑定篇 IoT产品之蓝牙设计 BLE CC2541 BLE CC2640
  • React组件之间如何通信?

    React组件通信就是值组件通过某种方式来传递信息以达到某个目的 方式 父组件向子组件传递信息 由于react数据流动是单向的 父组件在调用子组件时 只需要在子组件标签内传递参数 子组件通过props属性接收 function EmailI
  • Redis Java 客户端工具 - Lettuce框架介绍

    Redis Java 客户端 Lettuce 今天学习下Redis Java客户端开源项目 Lettuce Lettuce支持同步 异步通信的方式 API调用 也支持响应式编程API 包括发布 订阅消息 高可用性服务部署架构 开始之旅 Ma
  • 【Windows打开OpenSSH服务端支持】

    文章目录 概要 整体架构流程 技术细节 1 安装OpenSSH服务端 2 设置自启动 3 启动服务 4 资源监视器 修改配置 防火墙 小结 概要 项目需要装了一个Windows Server 2022 由于不能亲自到场调试 我就打开了Ope
  • 【数据结构】检查两棵树是否相同

    问题 给定两个二叉树 编写一个函数来检验它们是否相同 如果两个树在结构上相同 并且节点具有相同的值 则认为它们是相同的 示例 1 输入 1 1 2 3 2 3 1 2 3 1 2 3 输出 true 示例 2 输入 1 1 2 2 1 2
  • python: n个人围成一圈

    题目 n个人围成一圈 编号1 2 3 n 从1开始报数 1 3循环报数 报到3的人退出 则最后留下来的人是几号 有n个人围成一圈 顺序排号 从第一个人开始报数 从1到3报数 凡报到3的人退出圈子 问最后留下的是原来第几号的那位 n int
  • PWM 互补两个引脚输出相同的PWM波形 CH1 和CH1N

    将互补CH1N 输出pwm与CH1输出相同的波形 TIM OCInitStructure TIM OCPolarity TIM OCPolarity Low 输出极性 TIM输出比较极性高 TIM OCInitStructure TIM O
  • 编程机器人考级证书有用吗_全国青少年机器人技术等级考试的证书有用吗?

    好多家长咨询全国青少年机器人技术等级考试的证书有用吗 含金量高吗 今天在这里给大家科普一下 大赛组织者是谁 全国青少年机器人技术等级考试是由中国电子学会发起的面向青少年机器人技术能力水平的社会化评价项目 而中国电子学会是工业和信息化部直属事
  • 大神之路-起始篇

    欢迎关注 WeiyiGeek 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 偷偷的告诉你哟 极客全栈修炼 微信小程
  • 为什么家里pm25比外面高_为什么男人总是对“外面的女人”格外心动?

    陈粒在 易燃易爆炸 的歌词中有唱到 想我冷艳 还想我轻佻又下贱 要我阳光 还要我风情不摇晃 爱我纯粹 还爱我赤裸不糜颓 图我情真 还图我眼波销魂 把一个男人 贪欲 的状态描写的淋漓尽致 想鱼和熊掌兼得 既想抱着白玫瑰 又想拎着红玫瑰 这个时
  • 因果图用例设计方法概念详解

    为什么么需要因果图 在黑盒测试中 等价类划分或边界值分析法只考虑了不同的输入和不同的输出之间的关系 但是如果是各个输入条件之间有很复杂的组合 这二种设计方法都很难用一个系统的方法进行描述 设计测试用例只能依靠测试人员主观的猜测或者分析 具有
  • 五大排序算法(C语言)

    一 插入排序 每次将一个待排序的记录按其关键字大小插入到前面已排序好的子序列中 直到全部记录插入完成 4 7 2 6 9 13 1 5 4 7 2 6 9 13 1 5 2 4 7 6 9 13 1 5 2 4 6 7 9
  • Timer.schedule方法的使用

    java util Timer定时器的常用方法如下 schedule TimerTask task long delay 延迟delay毫秒后 执行一次task schedule TimerTask task long delay long
  • Oracle insert 插入数据的几种方式

    1 insert 的单表插入 INSERT INTO
  • Leetcode 本地调试环境(C++)

    文章目录 二叉树调试 刷题时 经常需要本地调试 特此整理一下如何依照 LeetCode 的样式 输入测试用例以及打印结果 增强结果的可视性 二叉树调试 利用数组生成二叉树 这里以LeetCode第102题层序遍历为例 工具函数 TreeNo
  • SmartFusion从FPGA到ARM(十一)——CorePWM的使用

    文章目录 前言 IP核添加与配置 库函数简介 posedge和nededge 对齐方式 示例1 基本PWM生成 示例2 带相位差的PWM生成 PWM应用示例 系列教程 SmartFusion从FPGA到ARM系列教程 前言 CorePWM是
  • 贪心算法例题:2850商人小鑫

    Problem Description 小鑫是个商人 当然商人最希望的就是多赚钱 小鑫也一样 这天 他来到了一个遥远的国度 那里有着n件商品 对于第i件商品需要付出ci的价钱才能得到 当然 对于第i件商品 小鑫在自己心中有一个估价pi 代表
  • 无法解析的外部符号__imp__AlphaBlend@44

    使用Win32 API函数AlphaBlend编译时出现一个错误 无法解析的外部符号 imp AlphaBlend 44 解决办法是在使用得地方包含Msimg32 lib 具体是在文件头部添加代码 pragma comment lib Ms
  • 利用PyQt5制作本地音乐播放器

    介绍 本文是对之前的音乐播放器的一些改进和功能实现 只写了有变化的部分 具体部分请看上一篇博客 利用PyQt5和QSS制作本地音乐播放器 初稿 https blog csdn net weixin 44343083 article deta