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如何实现文件拷贝器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2022-03-03 21:22:35
收藏
分享
海报
0 条评论
29
上一篇:Python如何通过Scrapy框架实现爬取百度新冠疫情数据 下一篇:C语言如何开发实现井字棋
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码