Python+PyQt5 打造多功能图像浏览与处理 Qt 界面,涵盖选图、旋转缩放等功能
创建一个包含所有指定功能的Qt界面相对复杂,但我可以提供一个基于Python和PyQt5的基本框架,这将指导你如何开始这个项目。这个示例将包括打开文件夹、浏览图像、显示图像以及基本的图像处理功能(如旋转和缩放)的接口。裁剪功能将需要更复杂的交互,但我会给出一个方向。 首先,确保你已经安装了PyQt5。如果没有,你可以通过pip安装: ```bash pip install PyQt5 ``` 接下来是基础的Qt界面代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QFileDialog, QSlider, QHBoxLayout from PyQt5.QtGui import QPixmap, QImage, QTransform from PyQt5.QtCore import Qt class ImageViewer(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('Image Viewer and Editor') self.setGeometry(100, 100, 800, 600) # Central widget central_widget = QWidget(self) self.setCentralWidget(central_widget) # Layouts layout = QHBoxLayout() left_layout = QVBoxLayout() right_layout = QVBoxLayout() # Image labels self.original_label = QLabel(self) self.result_label = QLabel(self) self.result_label.setStyleSheet("QLabel { background-color : lightgray; }") # Buttons self.open_folder_btn = QPushButton('Open Folder', self) self.open_folder_btn.clicked.connect(self.open_folder) self.prev_btn = QPushButton('Prev Image', self) self.prev_btn.clicked.connect(self.prev_image) self.next_btn = QPushButton('Next Image', self) self.next_btn.clicked.connect(self.next_image) self.rotate_btn = QPushButton('Rotate', self) self.rotate_btn.clicked.connect(self.rotate_image) # Slider for zooming self.zoom_slider = QSlider(Qt.Horizontal, self) self.zoom_slider.setMinimum(10) self.zoom_slider.setMaximum(300) self.zoom_slider.setValue(100) self.zoom_slider.valueChanged.connect(self.zoom_image) # Add widgets to layouts left_layout.addWidget(self.original_label) left_layout.addWidget(self.zoom_slider) right_layout.addWidget(self.result_label) right_layout.addWidget(self.rotate_btn) layout.addLayout(left_layout, 1) layout.addLayout(right_layout, 1) central_widget.setLayout(layout) # Initialize image list self.image_paths = [] self.current_index = 0 def open_folder(self): folder_path = QFileDialog.getExistingDirectory(self, "Select Folder") if folder_path: self.image_paths = [f.path() for f in sorted(QDir(folder_path).entryInfoList(QDir.Files)) if f.suffix().lower() in ['png', 'jpg', 'jpeg']] if self.image_paths: self.show_image(self.image_paths[0]) def show_image(self, path): pixmap = QPixmap(path) self.original_label.setPixmap(pixmap) self.result_label.setPixmap(pixmap) def prev_image(self): if self.current_index > 0: self.current_index -= 1 self.show_image(self.image_paths[self.current_index]) def next_image(self): if self.current_index < len(self.image_paths) - 1: self.current_index += 1 self.show_image(self.image_paths[self.current_index]) def rotate_image(self): pixmap = QPixmap(self.original_label.pixmap()) transformed = pixmap.transformed(QTransform().rotate(90)) self ######[AI写代码神器 | 1023点数解答 | 2024-07-28 09:39:44]
- Java JFrame 实现多界面跳转:含登录、注册及个人信息管理功能(讯飞星火 | 503点数解答 | 2024-06-06 23:49:29)408
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)489
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)441
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)435
- Qt 绘图全解析:从原理到示例及关键逻辑 (字节豆包 | 265点数解答 | 2025-03-12 10:55:54)188
- Qt 实战:用 QGraphics 图元轻松实现绘图(附示例代码)(字节豆包 | 226点数解答 | 2025-03-12 10:56:56)220
- CentOS下Java进程出现futex_wait_queue_me问题的处理全流程(阿里通义 | 283点数解答 | 2023-11-20 14:51:26)483
- 替雷利珠单抗致免疫相关性糖尿病:病例报道与机制探讨,为临床用药敲响警钟( | 164点数解答 | 2024-10-11 14:52:52)285
- Python 代码转 C++:计算花朵鲜艳值总和(字节豆包 | 408点数解答 | 2026-04-19 21:50:57)17
- 用 C++ 和 OpenCV 生成带随机偏移的圆周上的点:代码剖析(字节豆包 | 29点数解答 | 2024-11-06 23:40:42)271
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)414
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)440