import sys from pathlib import Path from PyQt6.QtWidgets import ( QApplication, QWidget, QHBoxLayout, QListWidget, QLabel, QFileDialog ) from PyQt6.QtGui import QPixmap from PyQt6.QtCore import Qt class ImageViewer(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Image Viewer") self.resize(800, 600) self.layout = QHBoxLayout(self) # Список файлов self.file_list = QListWidget() self.file_list.itemClicked.connect(self.display_image) self.layout.addWidget(self.file_list, 1) # Область для изображения self.image_label = QLabel("Выберите файл") self.image_label.setAlignment(Qt.AlignmentFlag.AlignCenter) self.layout.addWidget(self.image_label, 3) # Открыть директорию self.open_directory() def open_directory(self): dir_path = QFileDialog.getExistingDirectory(self, "Выберите папку с изображениями") if not dir_path: return self.files = list(Path(dir_path).glob("*.[pj][np][gmb]*")) # png/jpg/jpeg/bmp/gif self.file_list.clear() for file in self.files: self.file_list.addItem(file.name) def display_image(self, item): index = self.file_list.row(item) file_path = self.files[index] pixmap = QPixmap(str(file_path)) if pixmap.isNull(): self.image_label.setText("Не удалось открыть изображение") return # Подгонка изображения под размер QLabel с сохранением пропорций pixmap = pixmap.scaled( self.image_label.size(), Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation ) self.image_label.setPixmap(pixmap) # Чтобы изображение подгонялось при изменении размера окна def resizeEvent(self, event): if self.image_label.pixmap(): self.display_image(self.file_list.currentItem()) super().resizeEvent(event) if __name__ == "__main__": app = QApplication(sys.argv) viewer = ImageViewer() viewer.show() sys.exit(app.exec())