Python PyQt5如何实现文件拷贝器
Python PyQt5如何实现文件拷贝器
这篇文章将为大家详细讲解有关Python PyQt5如何实现文件拷贝器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
UI设置
defui_init(self):'''界面的函数'''self.setWindowTitle('拷贝器')self.resize(600,400)self.setMinimumSize(600,400)#设置窗口的最小值'''控件'''self.root_btn=QPushButton()self.copy_btn=QPushButton()self.start_btn=QPushButton()self.root_text=QTextBrowser()self.copy_text=QTextBrowser()self.log=QTextBrowser()self.h2_layout=QHBoxLayout()self.h3_layout=QHBoxLayout()self.h4_layout=QHBoxLayout()self.v_layout=QVBoxLayout()self.progerss=QProgressBar()self.finish_sound=QSound(':resource/finish.wav')#设置提示音'''控件设置'''self.root_btn.setText('选择文件夹')self.root_btn.setFixedSize(150,30)self.copy_btn.setText('选择拷贝路径')self.copy_btn.setFixedSize(150,30)self.start_btn.setText('开始')self.start_btn.setFixedSize(50,30)self.root_text.setFixedHeight(27)self.copy_text.setFixedHeight(27)self.progerss.setValue(0)'''控件摆放'''self.h2_layout.addWidget(self.root_text)self.h2_layout.addWidget(self.root_btn)self.h3_layout.addWidget(self.copy_text)self.h3_layout.addWidget(self.copy_btn)self.h4_layout.addWidget(self.progerss)self.h4_layout.addWidget(self.start_btn)self.v_layout.addLayout(self.h2_layout)self.v_layout.addLayout(self.h3_layout)self.v_layout.addWidget(self.log)self.v_layout.addLayout(self.h4_layout)self.setLayout(self.v_layout)
这次加入了一个完成的音效
QSound解析文件时,可能会出现这问题
QSoundEffect(qaudio): Error decoding source
self.finish_sound = QSound('resource/finish.wav') # 设置提示音
原来这这样写的,但会出现上面的问题,就在写一个qrc文件,再将qrc文件转成py文件,再引入这个py文件,这样就可以使用了。在使用这个音频只需要在路径上加一个 :
,就如这样self.finish_sound = QSound(':resource/finish.wav') # 设置提示音
qrc文件转py文件
先新建一个txt文件,在向里面写入这样的语句:
<RCC><qresourceprefix="resource/"><filealias="finish.wav">resource/finish.wav</file></qresource></RCC>
resource/
是放音频的文件夹名finish.wav
是音频名resource/finish.wav
是完整音频路径
接着将文件后缀改为qrc,在利用cmd命令窗中键入pyrcc5 -o resource.qrc resource.py
,将.qrc文件转成.py文件。
主要逻辑
defvariates_init(self):'''储存变量的函数'''self.root_path=''#要拷贝的路径self.copy_path=''#要拷贝到的路径self.file_list=[]#文件名集合self.len=0#文件夹下文件数量defcopy_file(self):'''拷贝文件的函数'''count=0#临时设置进度条数值self.progerss.setRange(0,self.len)#设置进度条的数值self.progerss.setValue(0)#设置进度条初始值'''拷贝器主逻辑'''forfileinself.file_list:root_path=self.root_path+"/"+filecopy_path=self.copy_path+"/"+filewithopen(root_path,"rb")asroot_file:withopen(copy_path,"wb")ascopy_file:whileTrue:data=root_file.read(1024)ifdata:copy_file.write(data)else:count+=1self.progerss.setValue(count)breakdefdir_file(self):'''遍历目录的函数'''filelist=os.listdir(self.root_path)self.file_list=filelistdeflen_file(self):'''文件数量的函数'''self.len=len(self.file_list)
拷贝器的逻辑:
从文件名集合中获取文件名
合并出原始文件路径和拷贝到的路径
根据原始文件路径打开文件模式为只读,根据拷贝到的路径新建一个文件写入
拷贝的文件每次写入1024字节,当没有数据后,就结束写入并保存文件,进度条数值加1
信号与槽
defconnect_init(self):'''信号与槽连接的函数'''self.root_btn.clicked.connect(lambda:self.btn_slot())self.copy_btn.clicked.connect(lambda:self.btn_slot())self.start_btn.clicked.connect(self.start_slot)defstart_slot(self):'''开始按键的槽函数'''self.root_btn.setEnabled(False)self.copy_btn.setEnabled(False)self.start_btn.setEnabled(False)self.dir_file()#遍历指定文件夹下的文件并添加到self.file_list集合中self.len_file()#获取文件夹下文件数量self.copy_file()#开始拷贝文件self.log.append('拷贝成功!')self.finish_sound.play()#播放完成后的提示音defbtn_slot(self):'''上面两个按键的槽函数'''btn=self.sender()ifbtn==self.root_btn:directory=QFileDialog.getExistingDirectory(None,"选取文件夹","C:/")ifdirectory:self.root_text.setText(directory)self.root_path=directoryself.log.append('选择文件成功!')elifbtn==self.copy_btn:directory=QFileDialog.getExistingDirectory(None,"选取拷贝位置","C:/")ifdirectory:self.copy_text.setText(directory)self.copy_path=directoryself.log.append('选取拷贝位置成功!')
成果展示
关于“Python PyQt5如何实现文件拷贝器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...
-
Python如何利用D3Blocks绘制可动态交互的图表
-
2021年度编程语言揭晓
-
PPython:PHP 拥抱 Python 的利器
-
哪种Python IDE最适合你?这里有一份优缺点列表
-
Python分隔字符串函数用法split
aaa,bbb=str.split(‘&&’,2)第一个参数为分隔符第二个参数是要完成的最大拆分数...
-
php安全编程——python测试实例编写
-
神奇的Python模块:pdfkit,将Python抓取的网址内容保存pdf文件