新建一个pyqt5,要求实现以下步骤 1、有按键“打开文件夹”,可自主选定文件夹 2、有一个label框,用于显示步骤1 选定的文件夹里所有的图片,默认展示第一张图片,每次只展示一张3、按键“画矩形框”,可对当前展示的图片进行用鼠标手动画一个任意大小的红色矩形框的操作,这样就得到一张新图片(带矩形框)
时间: 2023-11-27 15:49:59 浏览: 84
好的,我可以提供一份参考代码供您参考。需要注意的是,代码只是提供了基本框架和实现思路,具体的细节和优化可以根据您的需求进行修改。
```python
import os
from PyQt5.QtGui import QPixmap, QPainter, QColor, QPen
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QFileDialog
class ImageLabel(QLabel):
def __init__(self):
super().__init__()
self.pixmap = QPixmap()
def setPixmap(self, pixmap):
self.pixmap = pixmap
super().setPixmap(pixmap)
def paintEvent(self, event):
super().paintEvent(event)
painter = QPainter(self)
painter.setPen(QPen(QColor(255, 0, 0), 2, Qt.SolidLine))
painter.drawRect(self.rect)
def setRect(self, rect):
self.rect = rect
self.update()
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 创建“打开文件夹”按钮
self.open_folder_button = QPushButton('打开文件夹', self)
self.open_folder_button.clicked.connect(self.open_folder)
# 创建“画矩形框”按钮
self.draw_rect_button = QPushButton('画矩形框', self)
self.draw_rect_button.clicked.connect(self.draw_rect)
# 创建图片标签
self.image_label = ImageLabel()
# 布局
layout = QVBoxLayout()
layout.addWidget(self.open_folder_button)
layout.addWidget(self.image_label)
layout.addWidget(self.draw_rect_button)
self.setLayout(layout)
# 初始化变量
self.image_dir = ''
self.image_list = []
self.current_index = 0
def open_folder(self):
# 弹出文件夹选择对话框
folder_path = QFileDialog.getExistingDirectory(self, '打开文件夹', './')
if folder_path:
# 获取文件夹中所有的图片文件
self.image_dir = folder_path
self.image_list = [os.path.join(self.image_dir, file) for file in os.listdir(self.image_dir) if file.endswith('.jpg') or file.endswith('.png')]
if self.image_list:
# 显示第一张图片
self.show_image(self.image_list[0])
self.current_index = 0
def show_image(self, image_path):
# 加载图片并显示
pixmap = QPixmap(image_path)
self.image_label.setPixmap(pixmap)
def draw_rect(self):
# 获取当前图片,创建画布
pixmap = self.image_label.pixmap
canvas = QPixmap(pixmap.size())
canvas.fill(Qt.white)
# 在画布上绘制当前图片
painter = QPainter(canvas)
painter.drawPixmap(QPoint(), pixmap)
# 绘制矩形框
rect = self.image_label.rect
painter.setPen(QPen(QColor(255, 0, 0), 2, Qt.SolidLine))
painter.drawRect(rect)
# 保存新图片
image_path = self.image_list[self.current_index]
new_image_path = os.path.splitext(image_path)[0] + '_rect.jpg'
canvas.save(new_image_path, 'jpg')
# 显示下一张图片
self.current_index += 1
if self.current_index < len(self.image_list):
self.show_image(self.image_list[self.current_index])
else:
self.image_label.clear()
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这份代码中,我们使用了PyQt5这个UI框架,通过按钮和标签等控件实现了一个简单的图片浏览器。具体来说,我们实现了以下几个步骤:
1. 创建了一个`MainWindow`类,继承自`QWidget`,用于显示整个应用程序的界面。
2. 在`MainWindow`类中创建了一个“打开文件夹”按钮,点击该按钮可以选择要浏览的图片所在的文件夹。
3. 创建了一个`ImageLabel`类,继承自`QLabel`,用于显示当前展示的图片,并且可以在图片上画矩形框。
4. 创建了一个“画矩形框”按钮,点击该按钮可以在当前展示的图片上手动画一个红色矩形框,并且保存带矩形框的新图片。
5. 实现了一些辅助方法,比如`show_image()`方法用于加载并显示图片,`draw_rect()`方法用于绘制矩形框并保存新图片。
需要注意的是,这份代码只提供了基本框架和实现思路,具体的细节和优化可以根据您的需求进行修改。
阅读全文