jquery 个人网站,做婚纱影楼网站的价格,南昌住房建设局网站,网站如何清除百度收录0. 目录
PyQt学习记录01——加法计算器 PyQt学习记录02——串口助手
1. 前言
本次主要是为了学习Qt中的 QFileDialog 函数#xff0c; QFileDialog.getExistingDirectory#xff1a;用于选择文件夹#xff0c;返回的是一个文件夹路径。 QFileDialog.getOpenFileName…0. 目录
PyQt学习记录01——加法计算器 PyQt学习记录02——串口助手
1. 前言
本次主要是为了学习Qt中的 QFileDialog 函数 QFileDialog.getExistingDirectory用于选择文件夹返回的是一个文件夹路径。 QFileDialog.getOpenFileName 用于选择单个文件。返回的是文件的完整路径。
以及通过importlib.util实现跨文件的函数调用即通过将定义一个对象动态加载和调用该py文件中的函数详见第二小节
希望对你有所帮助。
2. Ui界面
lineEdit 用于记录文件夹路径 lineEdit_2 用于记录水印文件路径 其余元素详见第3小节的程序代码
3. 程序代码
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from WaterMask import Ui_MainWindow # 导入 WaterMask 的 UI 类
from PyQt5.QtCore import QTimer
import importlib.util # 用于动态加载2.py中的函数# 动态加载 2.py
#加载一个名为 watermark 的模块可自由命名它的文件路径是 2.py。
spec importlib.util.spec_from_file_location(watermark, 2.py)
#用于创建一个模块对象watermark_module。
watermark_module importlib.util.module_from_spec(spec)
#这行代码的作用是执行 2.py 文件中的代码并将模块中的函数、类等加载到 watermark_module 对象中。
spec.loader.exec_module(watermark_module)
#调用则使用watermark_module.add_watermark_to_images(folder_path, watermark_path)class WatermarkApp(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self) # 设置 UI 界面# 绑定按钮点击事件self.pushButton.clicked.connect(self.select_folder) # 打开文件夹路径self.pushButton_2.clicked.connect(self.select_watermark) # 打开水印路径self.pushButton_3.clicked.connect(self.process_files) # 开始转换按钮def select_folder(self):folder_path QFileDialog.getExistingDirectory(self, 选择文件夹)if folder_path:self.lineEdit.setText(folder_path)def select_watermark(self):watermark_path, _ QFileDialog.getOpenFileName(self, 选择水印图片, , Image Files (*.png *.jpg *.bmp *.jpeg))if watermark_path:self.lineEdit_2.setText(watermark_path)def process_files(self):folder_path self.lineEdit.text()watermark_path self.lineEdit_2.text()if not folder_path or not watermark_path:print(请先选择文件夹和水印图片)return# 按钮按下后直接变为 “转换中”self.pushButton_3.setText(转换中)self.pushButton_3.setEnabled(False)# 延时500ms调用 2.py 中的 add_watermark_to_images 函数传递回调函数来恢复按钮状态QTimer.singleShot(500, lambda: self.start_batch_processing(folder_path, watermark_path))def start_batch_processing(self, folder_path, watermark_path):# 调用 2.py 中的批量处理函数watermark_module.add_watermark_to_images(folder_path, watermark_path)# 批量处理完成后恢复按钮状态self.pushButton_3.setText(开始转换)self.pushButton_3.setEnabled(True)if __name__ __main__:app QApplication(sys.argv)window WatermarkApp()window.show()sys.exit(app.exec_())
需要注意的是本次学习调用了2.py来处理复杂的水印添加功能所以展现的的代码中可以理解为只是一个连接ui界面和2.py中的批处理函数的中间件即ui界面提供文件路径和开始命令通过所展现代码传递给2.py。
注意以下仅展现的2.py的基础代码
from PIL import Image
import osdef add_watermark_to_images(folder_path, watermark_path):try:for filename in os.listdir(folder_path):file_path os.path.join(folder_path, filename)if file_path.lower().endswith((png, jpg, jpeg, bmp)):print(f给 {file_path} 添加水印: {watermark_path})except Exception as e:print(f发生错误: {e})
需要注意的是这里使用的动态加载方法在使用pyinstaller打包为exe文件时会出现找不到2.py文件的问题所以你需要将动态加载更改为传统import导入同时将2.py更改为two.py
import two
import importlib.util # 用于动态加载2.py中的函数
# 动态加载 two.py
#加载一个名为 watermark 的模块可自由命名它的文件路径是 two.py。
spec importlib.util.spec_from_file_location(watermark, two.py)
#用于创建一个模块对象watermark_module。
watermark_module importlib.util.module_from_spec(spec)
#这行代码的作用是执行 two.py 文件中的代码并将模块中的函数、类等加载到 watermark_module 对象中。
spec.loader.exec_module(watermark_module)
#调用则使用watermark_module.add_watermark_to_images(folder_path, watermark_path)#调用则使用
two.add_watermark_to_images(folder_path, watermark_path)4. 运行结果
点击’开始转换’后按钮文本改变为’转换中’同时在控制台中显示进度转换完成后按钮恢复