static-files/oop-exam/image_viewer.py

64 lines
No EOL
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())