Добавить oop-exam/image_viewer.py

This commit is contained in:
helldh 2025-12-24 10:53:07 +03:00
parent e8756998ac
commit e11dac82ba

64
oop-exam/image_viewer.py Normal file
View file

@ -0,0 +1,64 @@
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())