[PySide6]使用PyPDF2与PySide6制作一个PDF加密小工具
环境配置python 3.10PyPDF2 1.26.0PySide6 6.2.3IDE PyCharm社区版界面设计Qt设计师路径在PySide6目录下,我的路径为: \Lib\site-packages\PySide6使用 Qt设计师拖拉拽一个界面将ui文件保存到python项目的ui文件夹中,项目结构如图所示main_window.ui是ui文件main.py是入口文件main_window
·
-
环境配置
python 3.10
PyPDF2 1.26.0
PySide6 6.2.3
IDE PyCharm社区版 -
界面设计
Qt设计师路径在PySide6目录下,我的路径为: \Lib\site-packages\PySide6
使用 Qt设计师拖拉拽一个界面
将ui文件保存到python项目的ui文件夹中,项目结构如图所示
main_window.ui是ui文件
main.py是入口文件
main_window.py是界面相关逻辑文件
pdf_encrypt.py是加密pdf的文件 -
代码
pdf_encrypt.py
‘# type:PdfFileReader’ 是做类型说明,不然后面的pdf_reader没有方法提示,就很*疼
from PyPDF2 import PdfFileReader, PdfFileWriter
"""
@filename: /pdf_encrypt.py
@Author: 四十
@createtime: 2022/3/19-20:35
@Description: ...
"""
def encrypt(path, pwd):
try:
pdf_reader = PdfFileReader(stream=path, strict=False) # type:PdfFileReader
except Exception as e:
return e
filepath = path[:path.rfind("/")] + "/"
filename = path.split("/")[-1].split(".")
file_suffix = filename[1]
if file_suffix != "pdf":
return "Please select a pdf file!"
filename = filename[0] + "_pwd.pdf"
pdf_writer = PdfFileWriter() # type:PdfFileWriter
try:
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
except Exception as e:
return e
pdf_writer.encrypt(pwd)
print(filepath + filename)
try:
with open(filepath + filename, "wb") as f:
pdf_writer.write(f)
except Exception as e:
return e
else:
return "Encrypt Done!"
if __name__ == '__main__':
a = "C:/Users/Administrator/Desktop/test.pdf"
print(encrypt(a, "123456"))
main_window.py
"""
@filename: /main_window.py
@Author: 四十
@createtime: 2022/3/19-22:10
@Description: ...
"""
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QWidget, QFileDialog, QDialog, QTextEdit
from PySide6.QtUiTools import QUiLoader
from pdf_encrypt import encrypt
class MyDialog(QDialog):
"""
"""
def __init__(self, title, content):
super().__init__()
self.setModal(True)
self.title = title
self.setWindowTitle(self.title)
self.setFixedSize(260, 230)
self.text_edit = QTextEdit(self)
self.text_edit.setStyleSheet("border:none;margin:10,10,10,10")
self.text_edit.setEnabled(False)
self.content = content
self.text_edit.setText(content)
self.show()
self.exec()
class MainWindow(QWidget):
def __init__(self):
# 通过QFile读取ui文件
qfile = QFile("ui/main_window.ui")
qfile.open(QFile.ReadOnly)
qfile.close()
# 加载ui, action_info,pushButton_file_broswer等都是Qt设计师中设置的objectName
self.ui = QUiLoader().load(qfile)
self.ui.setWindowTitle("PDF Encrypt")
self.ui.pushButton_file_broswer.clicked.connect(self.open_file_dialog)
self.ui.action_info.triggered.connect(self.about_dialog)
self.ui.pushButton_encryot.clicked.connect(self.encrypt_file)
def open_file_dialog(self):
dialog = QFileDialog(self.ui)
dialog.setNameFilter("*.pdf") # 设置文件过滤,只显示pdf文件
dialog.setViewMode(QFileDialog.Detail)
if dialog.exec():
filenames = dialog.selectedFiles()
self.ui.textEdit_filepath.setText(filenames[0]) # 将路径放入文本框
def get_filepath(self):
return self.ui.textEdit_filepath.toPlainText()
def get_password(self):
return self.ui.textEdit_password.toPlainText()
def encrypt_file(self):
path = self.get_filepath()
password = self.get_password()
self.ui.label_tips_content.setStyleSheet("QLabel{color:red}")
if len(path) == 0:
self.ui.label_tips_content.setText("Please select a pdf file")
return
if len(password) == 0:
self.ui.label_tips_content.setText("Please input a password!")
return
result = encrypt(path, password)
self.result_dialog(str(result))
@staticmethod
def result_dialog(content):
MyDialog("PDF Encrypt Result", content)
@staticmethod
def about_dialog():
MyDialog("PDF Encrypt", "Dev by: sishi\nVersion: 0.0.00.01")
main.py
"""
@filename: /main.py
@Author: 四十
@createtime: 2022/3/20-15:43
@Description: ...
"""
from PySide6.QtWidgets import QApplication
from main_window import MainWindow
if __name__ == '__main__':
app = QApplication()
window = MainWindow()
window.ui.show()
app.exec()
-
运行效果
-
总结
一个简单的小工具,勉强能用吧.还有很多可以提高的地方,先记录在这里,免得时间一长就忘了.
接下来还有打包,用pyinstaller就行, 下次再说吧!
更多推荐
已为社区贡献1条内容
所有评论(0)