肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

PYTHON学习汇报

小白一段时间学习PYTHON后,结合AI的第一个工具:看图工具

PYTHON+PYQT6

欢迎大家交流!

当前主要功能

  • 浏览指定文件夹
  • 过滤图片格式
  • 根据exif信息自动旋转方向
  • 可以播放指定音乐
  • 可以删除同名所有图片

后续:

  • 增加快捷键
  • 增加图片放大缩小功能
  • 增加幻灯片功能
  • 解决图标打包功能

总结:

有了AI,事半功倍。


以上是源代码:

import os

from PyQt6.QtWidgets import QMainWindow,QApplication,QFileDialog,QMessageBox

from PyQt6.QtGui import QPixmap

from PyQt6.QtCore import pyqtSlot,Qt

from Ui_main import Ui_MainWindow

import func

import pygame

class MainWindow(QMainWindow,Ui_MainWindow):

def __init__(self):

super().__init__()

self.setupUi(self)

# 初始化变量

self.image_folder = ""

self.image_files = []

self.current_image_index = 0

self.music_files = []

self.music_playing = False

self.supported_image_extensions = [".jpg", ".jpeg", ".png", ".bmp", ".gif"]

self.supported_music_extensions = [".mp3", ".wav", ".ogg"]

# 初始化音乐播放器

pygame.mixer.init()

@pyqtSlot()

def on_folder_button_clicked(self):

"""选择图片文件夹并过滤文件"""

folder =
QFileDialog.getExistingDirectory(self, "选择图片文件夹")

if folder:

self.image_folder = folder

self.image_files = [

f for f in os.listdir(folder) if os.path.splitext(f)[1].lower() in self.supported_image_extensions

]

self.current_image_index = 0

self.show_current_image()

def show_current_image(self):

"""显示当前图片,并根据 EXIF 数据自动旋转"""

if not self.image_files:

self.image_label.setText("没有图片可显示")

return


image_path = os.path.join(self.image_folder, self.image_files[self.current_image_index])


# 加载图片并自动旋转

cfunc=func.commonfunc()

pil_image = cfunc.load_image_with_orientation(image_path)

if pil_image:

pixmap = cfunc.convert_pil_to_qpixmap(pil_image)


# 缩放图片以适应窗口

scaled_pixmap = pixmap.scaled(

self.image_label.width(), self.image_label.height(), Qt.AspectRatioMode.KeepAspectRatio

)

self.image_label.setPixmap(scaled_pixmap)

else:

self.image_label.setText("无法加载图片")


@pyqtSlot()

def on_prev_button_clicked(self):

"""显示上一张图片"""

if self.image_files:

self.current_image_index = (self.current_image_index - 1) % len(self.image_files)

self.show_current_image()

@pyqtSlot()

def on_next_button_clicked(self):

"""显示下一张图片"""

if self.image_files:

self.current_image_index = (self.current_image_index + 1) % len(self.image_files)

self.show_current_image()

@pyqtSlot()

def on_music_button_clicked(self):

"""选择背景音乐文件"""

files, _ = QFileDialog.getOpenFileNames(

self, "选择背景音乐", "", "音乐文件 (*.mp3 *.wav *.ogg)"

)

if files:

self.music_files = files

self.play_music()


def play_music(self):

"""播放背景音乐"""

if self.music_files and not self.music_playing:

pygame.mixer.music.load(self.music_files[0]) # 只播放第一首

pygame.mixer.music.play(-1) # 循环播放

self.music_playing = True


def delete_current_image(self):

"""删除当前图片及其同名文件"""

if not self.image_files:

QMessageBox.warning(self, "警告", "没有图片可删除!")

return


current_image = self.image_files[self.current_image_index]

base_name, _ = os.path.splitext(current_image)

deleted_files = []


for file in os.listdir(self.image_folder):

if os.path.splitext(file)[0] == base_name:

file_path = os.path.join(self.image_folder, file)

try:

os.remove(file_path)

deleted_files.append(file)

except Exception as e:

QMessageBox.critical(self, "错误", f"无法删除文件 {file}: {e}")


if deleted_files:

QMessageBox.information(self, "成功", f"已删除文件:\n{', '.join(deleted_files)}")

del self.image_files[self.current_image_index]

if self.image_files:

self.current_image_index %= len(self.image_files)

self.show_current_image()

else:

self.image_label.setText("没有图片可显示")


def closeEvent(self, event):

"""关闭窗口时停止音乐"""

if self.music_playing:

pygame.mixer.music.stop()

event.accept()


if __name__ == '__main__':

import sys

app = QApplication(sys.argv)

window = MainWindow()

window.show()

sys.exit(app.exec())

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言