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