pyqt5 写一个功能齐全的音乐播放器(第一章)

本教程介绍了如何使用PyQt5创建一个简单的音乐播放器。通过QT Designer绘制界面,讲解了如何设置控件属性,如setGeometry和setText,并简单介绍了QTimer的使用,用于实现动态效果。文章还提到了QTimer的start()、stop()方法以及为何在处理定时器时需要避免潜在的问题。
摘要由CSDN通过智能技术生成

pyqt5 写一个功能齐全的音乐播放器(第一节)

简介

老规矩,第一句必须要说废话,pyqt5 相信看这个教程的都知道它是用来写图形界面的,而这一节会讲怎么画控件和一些简单的属性设置,在最后还会浅浅的讲讲QTimer这个东西,可以不用它吗,显然是不行,所以懂的可以当我没说,不懂的看完也不会懂多少哈哈哈

QT designer

这有什么好讲的,无非就是个画界面的东西,安装也就下一部下一部
网址在这里: https://build-system.fman.io/qt-designer-download

那么第一部新建一个widget,为什么是它,看下面我介绍一下
在这里插入图片描述
1.dialog with buttons bottom 很明显,底下有按钮的dailog
2…right 右边有按钮
3…并没有按钮
4…主窗口(顶部含有菜单)
5…窗口组件(跟dialog差不多,习惯就好)

那么我一开始就选widget吧,按create创建

在这里插入图片描述
调整一下大小,在这里我们并不想做些什么

在这里我们会用到
在这里插入图片描述
在这里插入图片描述
按住拖放到里面就好,然后选取拖进去表格控件(tablewidget)
在这里插入图片描述
在这里插入图片描述
调一下高宽和名字
![在这里插入图片描述](https://img-blog.csdnimg.cn/2dee2dc10c0040898c3af4eff2798d4d.png在这里插入图片描述

它长这样,上面的是按钮,双击一下该一下文字,我改的"<" 这个符号,大家猜我要干嘛

然后保存一下,好了,你已经创建第一个并没有什么鬼用的ui文件了,其实它就是一个类似于xml的文件,只是它的tag认的是pyqt专有的而已,你也可以用记事本打开看一下,但显然并没有必要

嗯,然后就是用命令生成一个py文件,还有c++的,既然指定讲的pyqt5的我当然不会给你扯它
咱们写一个.bat吧,以后用这个就好

pyuic5 1.ui -o main.py 
echo if __name__ == "__main__":
echo    import sys
echo    app = QtWidgets.QApplication(sys.argv)
echo    Form = QtWidgets.QWidget()
echo    ui = Ui_Form()
echo    ui.setupUi(Form)
echo    Form.show()
echo    sys.exit(app.exec_())

1.ui 就是 你生成的ui文件的路径
main.py 就是你想生成的py 的路径
这里说一下,如果你直接用命令行窗口的写的话是支持 -x的,用了-x 下面的主函数就会自动生成,但在.bat显然并不能,所以只能打一个了

关于命令行有兴趣可以稍微看看我写的文章,没有什么意思也没有什么用,可以不看

好了,很快,趁你没注意,你已经在锅里,啊不,py文件已经生成了!

那么你会看见一大陀代码,别害怕,绝大多数都不用看,只需要看这个,忍一下,快完了

代码部分

setGeometry() 属性
retranslateUi() 模块
setText() 属性

setGeometry 这个是控件的尺寸,四个参数分别是 x,y 长,宽 依次输入就可以,刚才画控件的软件就是为的干这个,之后也会有qtdesigner的讲解,所以不用着急

retranslateUi() 模块 这个是做两个语言切换的,默认生成就有,你也可以把它去掉,但是setText就要自己来,还有因为是顺序执行的,所以控件的响应咱也在这里写就行了

setText() 哇这,这这么直白不会看不懂吧,啊对,就是改文字

为什么只讲这三个呢,因为我懒,这章主题显然只是实现最简单的功能而已

浅讲QTimer使用

这个东西其实就是 time.sleep()的qt版本,因为time.sleep() 属于python的标准库里面的东西,跟qt并不兼容,所以你并不能使用time.sleep(),如果你硬要使用就要用到QThread / threading,这个之后有机会再讲线程的东西,在这里并不需要搬出这个,但是QTimer其实它也是个线程的东西,我们并不需要太了解,看下面

在代码开头写上

from PyQt5.QtCore import Qt
from PyQt5.QtCore import QTimer,QDateTime

导入了QTimer

在retranslateUi() 模块底下直接写

self.ena=1
self.a=221
self.timer=QTimer()#创建一个QTimer控件
self.timer.setTimerType(Qt.PreciseTimer)#启用精准模式,其实并不需要
self.pushbutton.clicked.connect(self.set1)
#点击响应 self.set1() 模块,要说的是我这里没有写lambda,所以并没有括号,你写就错了

好的,写一个self.set1() 和 self.hidding() 函数

def set1(self):
    self.timer.setTimerType(Qt.PreciseTimer)
    self.timer.setInterval(1)
    self.timer.timeout.connect(self.hidding1)
    self.timer.start()
    
def hidding1(self):
    
    if self.ena==True:
        self.a-=3
        self.playlist.resize(self.a, 241)
        if self.a<1:
            self.a=0
            

            self.ena=False

            self.playlist.hide()

    if self.ena==False:

        if self.a!=0:
            self.playlist.show()
        self.a+=1
        self.playlist.resize(self.a, 241)
        if self.a>219:
            self.a=221
            self.ena=True

 
 

然后点击按钮之后你就会看到表格控件鬼畜的时大时小,对我是故意的,因为我并没有给它停下

这里介绍QTimer属性

.setInterval() 很明显,就是告诉你相隔多久执行一次,你并不需要用循环 1,代表毫秒(ms),旧版是接受浮点数的,5它会警告要整数,为毛我并不知道
.timeout.connect 嗯首先connect的意思是连接,这个跟信号/槽的概念有关,以后会讲,你只需要知道,connect是用来启动函数的就完了,timeout的意思就是每次在时间间隔完了之后要干什么
.start() 这个就是QTimer 启动
.stop() 之后我就要写这个了,就是停止QTimer

stop()

def set1(self):

        self.timer=QTimer()
        self.timer.setTimerType(Qt.PreciseTimer)
        self.timer.setInterval(1)
        self.timer.timeout.connect(self.hidding1)
        self.timer.start()
        
    def hidding1(self):
        
        if self.ena==True:
            self.a-=3
            self.playlist.resize(self.a, 241)
            if self.a<1:
                self.a=0
                

                self.ena=False
                self.timer.stop()
                
                self.playlist.hide()

        if self.ena==False:

            if self.a!=0:
                self.playlist.show()
            self.a+=1
            self.playlist.resize(self.a, 241)
            if self.a>219:
                self.a=221
                self.ena=True
                self.timer.stop()

                

趁它不注意,我加上了stop() 这个显然就停下了,但当你点它四五下,你会发现不对,为什么每次结果都不一样,属于乱跳,因为QTimer毕竟是线程,它在每次停止时其实并不准确,所以千万不要这样写,在这里只是逐步引导你们踩这个坑,就是好玩罢了

deleteLater()

上面的程序非常的不稳定,所以写法明显不可行,所以以下我教大家怎么才能正常运行这个函数,不装了,我直接就画了个完整的界面,之后就用这个做我们的音乐播放器,复制吧!!!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtCore import QTimer,QDateTime
import time
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(682, 461)
        self.horizontalLayoutWidget 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值