Skip to content

Commit

Permalink
Labels
Browse files Browse the repository at this point in the history
  • Loading branch information
hawier-dev committed Sep 15, 2023
1 parent 651d5d3 commit d1f2d23
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 40 deletions.
81 changes: 45 additions & 36 deletions app_gui.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
from functools import partial

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QComboBox, QLabel, QPushButton, \
QWidget, QFileDialog, QStatusBar, QMessageBox

from PySide6.QtWidgets import (
QVBoxLayout,
QHBoxLayout,
QComboBox,
QLabel,
QPushButton,
QWidget,
QFileDialog,
QStatusBar,
QMessageBox,
)

from graphics_view import GraphicsView
from image_view import ImageView


Expand Down Expand Up @@ -82,57 +92,53 @@ def __init__(self, parent=None):
self.addLayout(self.bottom_settings_layout)

def add_image_view(self):
image_view = ImageView()
image_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
image_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
image_view.horizontalScrollBar().valueChanged.connect(
graphics_view = GraphicsView()
graphics_view.image_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
graphics_view.image_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
graphics_view.image_view.horizontalScrollBar().valueChanged.connect(
partial(self.slider_sync, "horizontal")
)
image_view.verticalScrollBar().valueChanged.connect(
graphics_view.image_view.verticalScrollBar().valueChanged.connect(
partial(self.slider_sync, "vertical")
)
image_view.photoAdded.connect(self.add_resolution)
image_view.tranformChanged.connect(self.set_transform)
image_view.multipleUrls.connect(self.load_multiple_images)
graphics_view.image_view.photoAdded.connect(self.add_resolution)
graphics_view.image_view.tranformChanged.connect(self.set_transform)
graphics_view.image_view.multipleUrls.connect(self.load_multiple_images)

self.image_views_layout.addWidget(image_view)
self.image_views.append(image_view)
self.image_views_layout.addLayout(graphics_view)
self.image_views.append(graphics_view)

def load_multiple_images(self, urls):
dialog = QMessageBox()
dialog.setWindowTitle('Multiple files')
dialog.setWindowTitle("Multiple files")
dialog.setText("Do you want to load multiple files?")
dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
result = dialog.exec_()
urls = urls

if result == QMessageBox.Yes:
missing_count = (len(urls) - len(self.image_views)) + len([item for item in self.image_views if item.original_image])
for i in range(missing_count):
self.add_image_view()

for item in self.image_views:
if not item.original_image:
item.loadImage(urls[0].toLocalFile())
if not item.image_view.url:
item.image_view.url = urls[0]
urls.remove(urls[0])

self.image_views_layout.removeWidget(item)

for item in self.image_views:
self.image_views_layout.addWidget(item)
item.image_view.loadImage(item.image_view.url.toLocalFile())

elif result == QMessageBox.No:
return

def remove_image_view(self):
if len(self.image_views) > 2:
self.image_views_layout.removeWidget(self.image_views[-1])
self.image_views_layout.removeItem(self.image_views[-1])
self.image_views[-1].deleteLater()
self.image_views[-1].image_view.deleteLater()
self.image_views[-1].text_view.deleteLater()
self.image_views.remove(self.image_views[-1])

def set_transform(self, *args):
for item in self.image_views:
item.set_transform(*args)
item.image_view.set_transform(*args)

def slider_sync(
self,
Expand All @@ -141,20 +147,21 @@ def slider_sync(
):
for item in self.image_views:
if orientation == "horizontal":
item.horizontalScrollBar().setValue(value)
item.image_view.horizontalScrollBar().setValue(value)
else:
item.verticalScrollBar().setValue(value)
item.image_view.verticalScrollBar().setValue(value)

def set_resolution(self, resolution):
resolution = resolution.split("x")
for item in self.image_views:
if item.scene().items():
item.scene().items()[0].setPixmap(
item.original_image
.scaled(int(resolution[0]), int(resolution[1]))
if item.image_view.scene().items():
item.image_view.scene().items()[0].setPixmap(
item.image_view.original_image.scaled(
int(resolution[0]), int(resolution[1])
)
)
item.setSceneRect(0, 0, int(resolution[0]), int(resolution[1]))
item.setSceneRect(0, 0, int(resolution[0]), int(resolution[1]))
item.image_view.setSceneRect(0, 0, int(resolution[0]), int(resolution[1]))
item.image_view.setSceneRect(0, 0, int(resolution[0]), int(resolution[1]))
self.resolution_status.setText("x".join(resolution))
self.resolution_status.setStyleSheet("color: lime")

Expand All @@ -173,9 +180,11 @@ def save_comparison(self):
file_dialog = QFileDialog()
file_dialog.setNameFilter("JPEG Image Files (*.jpg)")

file_path, _ = file_dialog.getSaveFileName(None, "Save Comparison Screenshot", "", "JPEG Image Files (*.jpg)")
file_path, _ = file_dialog.getSaveFileName(
None, "Save Comparison Screenshot", "", "JPEG Image Files (*.jpg)"
)

if file_path:
screenshot = self.images_widget.grab()
screenshot.save(file_path, 'jpg')
print(f'Saved screenshot as {file_path}')
screenshot.save(file_path, "jpg")
print(f"Saved screenshot as {file_path}")
38 changes: 38 additions & 0 deletions graphics_view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import random

from PySide6.QtGui import QFont, Qt
from PySide6.QtWidgets import QVBoxLayout, QLineEdit

from image_view import ImageView


class GraphicsView(QVBoxLayout):
def __init__(self):
super().__init__()
self.text_view = QLineEdit()
color = random.choice(
[
"#37874c",
"#374687",
"#873783",
"#873746",
"#909639",
"#966939",
"#399681",
"#399658",
"#07677a",
"#650a8c",
"#802d06",
]
)
font = QFont()
font.setBold(True)
font.setPointSize(14)
self.text_view.setFont(font)
self.text_view.setStyleSheet(f"background-color: {color}")
self.text_view.setAlignment(Qt.AlignCenter)

self.image_view = ImageView()

self.addWidget(self.image_view)
self.addWidget(self.text_view)
10 changes: 6 additions & 4 deletions image_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def __init__(self):
self.setDragMode(QGraphicsView.ScrollHandDrag)
self.zoom_factor = 0
self.original_image = None
self.url = None

def dragEnterEvent(self, event: QDragEnterEvent):
mime_data = event.mimeData()
Expand All @@ -37,9 +38,7 @@ def dropEvent(self, event: QDropEvent):
if mime_data.hasUrls():
file_path = mime_data.urls()[0].toLocalFile()
if len(mime_data.urls()) > 1:
self.multipleUrls.emit(
mime_data.urls()
)
self.multipleUrls.emit(mime_data.urls())
else:
self.loadImage(file_path)

Expand All @@ -63,7 +62,9 @@ def loadImage(self, file_path):
image_reader = QImageReader(file_path)
pixmap = QPixmap.fromImageReader(image_reader)
if pixmap.width() == 0:
QMessageBox.critical(self, 'Error', 'Unable to load the image.', QMessageBox.Ok)
QMessageBox.critical(
self, "Error", "Unable to load the image.", QMessageBox.Ok
)
return

if self.scene().items():
Expand All @@ -72,6 +73,7 @@ def loadImage(self, file_path):
self.original_image = pixmap
self.scene().addPixmap(pixmap)
self.photoAdded.emit(pixmap.width(), pixmap.height())
self.url = file_path

def set_transform(self, transform):
horz_blocked = self.horizontalScrollBar().blockSignals(True)
Expand Down

0 comments on commit d1f2d23

Please sign in to comment.