Добавить oop-exam/image_viewer.py
This commit is contained in:
parent
e8756998ac
commit
e11dac82ba
1 changed files with 64 additions and 0 deletions
64
oop-exam/image_viewer.py
Normal file
64
oop-exam/image_viewer.py
Normal 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())
|
||||||
Loading…
Add table
Add a link
Reference in a new issue