pyAesCrypt
是一个用于文件加密和解密的 Python 库,它基于 AES(高级加密标准)算法。PyQt5
是一个用于创建图形用户界面(GUI)的 Python 库。当你使用 pyAesCrypt
进行文件加密时,如果操作在主线程中执行,可能会导致 GUI 滞后,因为加密操作通常需要较长时间来完成。
pyAesCrypt
提供了简单的 API,便于集成到项目中。pyAesCrypt
和 PyQt5
都支持多种操作系统。当你在 PyQt5
的主线程中执行耗时的加密操作时,主线程会被阻塞,导致 GUI 无法及时响应用户操作,从而出现滞后现象。
为了避免 GUI 滞后,可以将耗时的加密操作放在一个单独的线程中执行。以下是一个示例代码:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel
from PyQt5.QtCore import QThread, pyqtSignal
import pyAesCrypt
class EncryptThread(QThread):
progress = pyqtSignal(int)
def __init__(self, file_path, password):
super().__init__()
self.file_path = file_path
self.password = password
def run(self):
buffer_size = 64 * 1024
with open(self.file_path, 'rb') as f_in:
with open(self.file_path + '.enc', 'wb') as f_out:
pyAesCrypt.encryptStream(f_in, f_out, self.password, buffer_size)
self.progress.emit(100)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('File Encryptor')
self.setGeometry(100, 100, 300, 200)
self.button = QPushButton('Encrypt File', self)
self.button.clicked.connect(self.encrypt_file)
self.button.move(100, 80)
self.label = QLabel('Progress: 0%', self)
self.label.move(100, 120)
def encrypt_file(self):
options = QFileDialog.Options()
file_path, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
"All Files (*);;Python Files (*.py)", options=options)
if file_path:
password = input("Enter password: ")
self.thread = EncryptThread(file_path, password)
self.thread.progress.connect(self.update_progress)
self.thread.start()
def update_progress(self, value):
self.label.setText(f'Progress: {value}%')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
通过将加密操作放在单独的线程中,可以确保 GUI 线程不会被阻塞,从而避免界面滞后问题。
领取专属 10元无门槛券
手把手带您无忧上云