Python3.10将多个ptx合并,要求代码可以打包为exe,双击之后弹出页面,页面首先选择输入文件夹,再选择输出文件夹,再输入合并以后的名字,最后点击开始,显示进度条,颜色为蓝色,进度条中要有百分比,给出代码,使用pyqt5界面化,界面要整洁干净,看着舒服,要注意,我之前的相关代码,运行之后会弹出Python停止工作的提示,请避免
时间: 2023-06-23 22:10:27 浏览: 71
以下是一个简单的实现界面化的Python3.10代码,可以将多个ptx文件合并为一个,并且可以打包为exe文件:
```python
import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog, QPushButton, QProgressBar, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt, QThread, pyqtSignal
class MergeThread(QThread):
progress_signal = pyqtSignal(int)
def __init__(self, input_path, output_path, output_name):
super().__init__()
self.input_path = input_path
self.output_path = output_path
self.output_name = output_name
def run(self):
ptx_files = [f for f in os.listdir(self.input_path) if f.endswith('.ptx')]
total_size = sum(os.path.getsize(os.path.join(self.input_path, f)) for f in ptx_files)
merged_file = open(os.path.join(self.output_path, self.output_name + '.ptx'), 'wb')
progress = 0
for f in ptx_files:
with open(os.path.join(self.input_path, f), 'rb') as file:
merged_file.write(file.read())
progress += os.path.getsize(os.path.join(self.input_path, f))
self.progress_signal.emit(int(progress * 100 / total_size))
merged_file.close()
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PTX文件合并工具'
self.left = 10
self.top = 10
self.width = 500
self.height = 300
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.setWindowIcon(QIcon('icon.png'))
input_folder_button = QPushButton('选择输入文件夹', self)
input_folder_button.move(20, 20)
input_folder_button.clicked.connect(self.select_input_folder)
output_folder_button = QPushButton('选择输出文件夹', self)
output_folder_button.move(20, 70)
output_folder_button.clicked.connect(self.select_output_folder)
output_name_label = QLabel('输出文件名:', self)
output_name_label.move(20, 120)
self.output_name_input = QLineEdit(self)
self.output_name_input.move(120, 120)
merge_button = QPushButton('开始合并', self)
merge_button.move(20, 170)
merge_button.clicked.connect(self.merge_ptx)
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(20, 220, 460, 20)
self.progress_bar.setVisible(False)
def select_input_folder(self):
self.input_folder = str(QFileDialog.getExistingDirectory(self, "选择输入文件夹"))
if self.input_folder:
print("选择的输入文件夹为: " + self.input_folder)
def select_output_folder(self):
self.output_folder = str(QFileDialog.getExistingDirectory(self, "选择输出文件夹"))
if self.output_folder:
print("选择的输出文件夹为: " + self.output_folder)
def merge_ptx(self):
if not hasattr(self, 'input_folder'):
return
if not hasattr(self, 'output_folder'):
return
output_name = self.output_name_input.text()
if not output_name:
return
self.progress_bar.setVisible(True)
self.progress_bar.setValue(0)
merge_thread = MergeThread(self.input_folder, self.output_folder, output_name)
merge_thread.progress_signal.connect(self.update_progress_bar)
merge_thread.start()
def update_progress_bar(self, value):
self.progress_bar.setValue(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
ex.show()
sys.exit(app.exec_())
```
代码说明:
1. 程序界面使用PyQt5实现,包括选择输入文件夹、选择输出文件夹、输入输出文件名和开始合并按钮。
2. 合并功能在`MergeThread`类中实现,继承自QThread类。具体实现为:获取输入文件夹中所有ptx文件,将它们合并为一个文件,并保存到输出文件夹中。在合并过程中,通过进度条来显示合并的进度。
3. 程序在主线程中运行,点击开始合并按钮时,会创建一个`MergeThread`的实例,并将其启动。在合并过程中,主线程会一直运行,并且更新进度条的值。
4. 程序可以打包为exe文件,可以使用pyinstaller等工具来实现。