Files
xsl-validator/src/MainWindow.py
T

147 lines
5.2 KiB
Python
Raw Normal View History

import glob
2025-05-23 11:09:47 +02:00
import os
from PySide6.QtCore import Qt
2025-05-23 11:09:47 +02:00
from PySide6.QtGui import QCursor, QPixmap
from PySide6.QtWidgets import QLabel, QMainWindow
2025-05-21 20:26:03 +02:00
from ui.MainWinddow_ui import Ui_MainWindow
2025-05-20 11:24:07 +02:00
class MainWindow(QMainWindow):
def __init__(self, parent=None):
"""
Konstruktor für die MainWindow-Klasse.
2025-05-23 11:09:47 +02:00
2025-05-20 11:24:07 +02:00
Args:
parent: Übergeordnetes Widget, falls vorhanden
"""
super().__init__(parent)
2025-05-23 11:09:47 +02:00
2025-05-20 11:24:07 +02:00
# UI einrichten
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
2025-05-23 11:09:47 +02:00
# Dict zum Speichern der Beziehung zwischen Thumbnails und großen Bildern
self.thumbnail_to_full_image = {}
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Dict zum Speichern der Original-Pixmaps für Zoom-Funktion
self.original_pixmaps = {}
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Aktueller Zoom-Faktor
self.current_zoom = 100 # 100%
2025-05-23 11:09:47 +02:00
# Bilder laden
2025-05-21 20:26:03 +02:00
self._load_images()
2025-05-23 11:09:47 +02:00
2025-05-20 11:24:07 +02:00
# Signale und Slots verbinden
self._connect_signals()
2025-05-23 11:09:47 +02:00
2025-05-21 20:26:03 +02:00
def _load_images(self):
"""Lädt alle GIF-Dateien aus dem Ressourcen-Verzeichnis."""
# Entferne bestehende Widgets aus den Layouts
self._clear_layout(self.ui.verticalLayout_2)
self._clear_layout(self.ui.verticalLayout_3)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Dicts zurücksetzen
self.thumbnail_to_full_image = {}
self.original_pixmaps = {}
2025-05-23 11:09:47 +02:00
# Pfad zum Ressourcen-Ordner
2025-05-21 20:26:03 +02:00
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
res_dir = os.path.join(base_dir, "src", "ui", "res")
2025-05-23 11:09:47 +02:00
# Alle GIF-Dateien finden
gif_files = glob.glob(os.path.join(res_dir, "*.gif"))
gif_files.sort() # Dateien alphabetisch sortieren
2025-05-23 11:09:47 +02:00
print(f"Gefundene GIF-Dateien: {gif_files}")
2025-05-23 11:09:47 +02:00
# Für jede GIF-Datei:
for gif_file in gif_files:
filename = os.path.basename(gif_file)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Original-Pixmap laden und speichern
original_pixmap = QPixmap(gif_file)
2025-05-23 11:09:47 +02:00
# Thumbnail erstellen und zur linken Spalte hinzufügen
thumbnail = QLabel()
thumbnail.setObjectName(f"thumbnail_{filename}")
2025-05-22 21:05:22 +02:00
thumbnail.setPixmap(original_pixmap.scaledToWidth(200))
thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
thumbnail.setMouseTracking(True)
self.ui.verticalLayout_2.addWidget(thumbnail)
2025-05-23 11:09:47 +02:00
# Vollbild-Version erstellen und zur rechten Spalte hinzufügen
fullsize = QLabel()
fullsize.setObjectName(f"fullsize_{filename}")
2025-05-22 21:05:22 +02:00
fullsize.setPixmap(original_pixmap)
2025-05-23 19:43:08 +02:00
fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung
self.ui.verticalLayout_3.addWidget(fullsize)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Beziehungen speichern
self.thumbnail_to_full_image[thumbnail] = fullsize
2025-05-22 21:05:22 +02:00
self.original_pixmaps[fullsize] = original_pixmap
2025-05-23 11:09:47 +02:00
# Click-Event für das Thumbnail einrichten
2025-05-23 19:43:08 +02:00
thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t)
2025-05-23 11:09:47 +02:00
def _clear_layout(self, layout):
"""Entfernt alle Widgets aus einem Layout."""
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.deleteLater()
2025-05-23 11:09:47 +02:00
2025-05-20 11:24:07 +02:00
def _connect_signals(self):
"""Verbindet Signale mit den entsprechenden Slots."""
# Button-Klicks verbinden
2025-05-22 21:05:22 +02:00
self.ui.pushButton.clicked.connect(self.on_button_clicked)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Zoom-Slider verbinden
self.ui.zoom.valueChanged.connect(self.apply_zoom)
2025-05-23 11:09:47 +02:00
def on_button_clicked(self):
"""Wird ausgeführt, wenn der Button geklickt wird."""
print("Button wurde geklickt!")
# Hier kann die gewünschte Aktion für den Button definiert werden
2025-05-23 11:09:47 +02:00
def on_thumbnail_clicked(self, event, thumbnail):
"""
Wird ausgeführt, wenn ein Thumbnail angeklickt wird.
2025-05-23 11:09:47 +02:00
Args:
event: Das Maus-Event
thumbnail: Das geklickte Thumbnail-Label
"""
print(f"Thumbnail {thumbnail.objectName()} wurde angeklickt: {event}")
2025-05-23 11:09:47 +02:00
# Zum entsprechenden Vollbild scrollen
full_image = self.thumbnail_to_full_image.get(thumbnail)
if full_image:
self.ui.scrollArea_2.ensureWidgetVisible(full_image)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
def apply_zoom(self, zoom_value):
"""
Wendet den Zoom-Faktor auf alle Bilder im rechten Panel an.
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
Args:
zoom_value: Der neue Zoom-Wert (in Prozent)
"""
self.current_zoom = zoom_value
print(f"Zoom geändert auf {zoom_value}%")
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Wende den Zoom auf alle Bilder an
for fullsize_label, original_pixmap in self.original_pixmaps.items():
# Berechne die neue Größe basierend auf dem Zoom-Faktor
new_width = int(original_pixmap.width() * zoom_value / 100)
2025-05-23 11:09:47 +02:00
2025-05-22 21:05:22 +02:00
# Skaliere das Bild und setze es ins Label
2025-05-23 19:43:08 +02:00
scaled_pixmap = original_pixmap.scaledToWidth(new_width, Qt.TransformationMode.SmoothTransformation)
2025-05-22 21:05:22 +02:00
fullsize_label.setPixmap(scaled_pixmap)
2025-05-23 11:09:47 +02:00
2025-05-22 21:22:25 +02:00
# Stelle sicher, dass die horizontale Zentrierung beibehalten wird
fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter)