Python-Dateien formatiert

This commit is contained in:
2025-05-23 11:09:47 +02:00
parent 0aa3ddadca
commit 89fdd326c4
2 changed files with 49 additions and 39 deletions
+44 -36
View File
@@ -1,8 +1,10 @@
import os
import glob import glob
from PySide6.QtWidgets import QMainWindow, QLabel import os
from PySide6.QtGui import QPixmap, QCursor
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from PySide6.QtGui import QCursor, QPixmap
from PySide6.QtWidgets import QLabel, QMainWindow
from ui.MainWinddow_ui import Ui_MainWindow from ui.MainWinddow_ui import Ui_MainWindow
@@ -10,58 +12,58 @@ class MainWindow(QMainWindow):
def __init__(self, parent=None): def __init__(self, parent=None):
""" """
Konstruktor für die MainWindow-Klasse. Konstruktor für die MainWindow-Klasse.
Args: Args:
parent: Übergeordnetes Widget, falls vorhanden parent: Übergeordnetes Widget, falls vorhanden
""" """
super().__init__(parent) super().__init__(parent)
# UI einrichten # UI einrichten
self.ui = Ui_MainWindow() self.ui = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
# Dict zum Speichern der Beziehung zwischen Thumbnails und großen Bildern # Dict zum Speichern der Beziehung zwischen Thumbnails und großen Bildern
self.thumbnail_to_full_image = {} self.thumbnail_to_full_image = {}
# Dict zum Speichern der Original-Pixmaps für Zoom-Funktion # Dict zum Speichern der Original-Pixmaps für Zoom-Funktion
self.original_pixmaps = {} self.original_pixmaps = {}
# Aktueller Zoom-Faktor # Aktueller Zoom-Faktor
self.current_zoom = 100 # 100% self.current_zoom = 100 # 100%
# Bilder laden # Bilder laden
self._load_images() self._load_images()
# Signale und Slots verbinden # Signale und Slots verbinden
self._connect_signals() self._connect_signals()
def _load_images(self): def _load_images(self):
"""Lädt alle GIF-Dateien aus dem Ressourcen-Verzeichnis.""" """Lädt alle GIF-Dateien aus dem Ressourcen-Verzeichnis."""
# Entferne bestehende Widgets aus den Layouts # Entferne bestehende Widgets aus den Layouts
self._clear_layout(self.ui.verticalLayout_2) self._clear_layout(self.ui.verticalLayout_2)
self._clear_layout(self.ui.verticalLayout_3) self._clear_layout(self.ui.verticalLayout_3)
# Dicts zurücksetzen # Dicts zurücksetzen
self.thumbnail_to_full_image = {} self.thumbnail_to_full_image = {}
self.original_pixmaps = {} self.original_pixmaps = {}
# Pfad zum Ressourcen-Ordner # Pfad zum Ressourcen-Ordner
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
res_dir = os.path.join(base_dir, "src", "ui", "res") res_dir = os.path.join(base_dir, "src", "ui", "res")
# Alle GIF-Dateien finden # Alle GIF-Dateien finden
gif_files = glob.glob(os.path.join(res_dir, "*.gif")) gif_files = glob.glob(os.path.join(res_dir, "*.gif"))
gif_files.sort() # Dateien alphabetisch sortieren gif_files.sort() # Dateien alphabetisch sortieren
print(f"Gefundene GIF-Dateien: {gif_files}") print(f"Gefundene GIF-Dateien: {gif_files}")
# Für jede GIF-Datei: # Für jede GIF-Datei:
for gif_file in gif_files: for gif_file in gif_files:
filename = os.path.basename(gif_file) filename = os.path.basename(gif_file)
# Original-Pixmap laden und speichern # Original-Pixmap laden und speichern
original_pixmap = QPixmap(gif_file) original_pixmap = QPixmap(gif_file)
# Thumbnail erstellen und zur linken Spalte hinzufügen # Thumbnail erstellen und zur linken Spalte hinzufügen
thumbnail = QLabel() thumbnail = QLabel()
thumbnail.setObjectName(f"thumbnail_{filename}") thumbnail.setObjectName(f"thumbnail_{filename}")
@@ -69,21 +71,25 @@ class MainWindow(QMainWindow):
thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
thumbnail.setMouseTracking(True) thumbnail.setMouseTracking(True)
self.ui.verticalLayout_2.addWidget(thumbnail) self.ui.verticalLayout_2.addWidget(thumbnail)
# Vollbild-Version erstellen und zur rechten Spalte hinzufügen # Vollbild-Version erstellen und zur rechten Spalte hinzufügen
fullsize = QLabel() fullsize = QLabel()
fullsize.setObjectName(f"fullsize_{filename}") fullsize.setObjectName(f"fullsize_{filename}")
fullsize.setPixmap(original_pixmap) fullsize.setPixmap(original_pixmap)
fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung fullsize.setAlignment(
Qt.AlignmentFlag.AlignHCenter
) # Horizontale Zentrierung
self.ui.verticalLayout_3.addWidget(fullsize) self.ui.verticalLayout_3.addWidget(fullsize)
# Beziehungen speichern # Beziehungen speichern
self.thumbnail_to_full_image[thumbnail] = fullsize self.thumbnail_to_full_image[thumbnail] = fullsize
self.original_pixmaps[fullsize] = original_pixmap self.original_pixmaps[fullsize] = original_pixmap
# Click-Event für das Thumbnail einrichten # Click-Event für das Thumbnail einrichten
thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t) thumbnail.mousePressEvent = (
lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t)
)
def _clear_layout(self, layout): def _clear_layout(self, layout):
"""Entfernt alle Widgets aus einem Layout.""" """Entfernt alle Widgets aus einem Layout."""
if layout is not None: if layout is not None:
@@ -92,53 +98,55 @@ class MainWindow(QMainWindow):
widget = item.widget() widget = item.widget()
if widget is not None: if widget is not None:
widget.deleteLater() widget.deleteLater()
def _connect_signals(self): def _connect_signals(self):
"""Verbindet Signale mit den entsprechenden Slots.""" """Verbindet Signale mit den entsprechenden Slots."""
# Button-Klicks verbinden # Button-Klicks verbinden
self.ui.pushButton.clicked.connect(self.on_button_clicked) self.ui.pushButton.clicked.connect(self.on_button_clicked)
# Zoom-Slider verbinden # Zoom-Slider verbinden
self.ui.zoom.valueChanged.connect(self.apply_zoom) self.ui.zoom.valueChanged.connect(self.apply_zoom)
def on_button_clicked(self): def on_button_clicked(self):
"""Wird ausgeführt, wenn der Button geklickt wird.""" """Wird ausgeführt, wenn der Button geklickt wird."""
print("Button wurde geklickt!") print("Button wurde geklickt!")
# Hier kann die gewünschte Aktion für den Button definiert werden # Hier kann die gewünschte Aktion für den Button definiert werden
def on_thumbnail_clicked(self, event, thumbnail): def on_thumbnail_clicked(self, event, thumbnail):
""" """
Wird ausgeführt, wenn ein Thumbnail angeklickt wird. Wird ausgeführt, wenn ein Thumbnail angeklickt wird.
Args: Args:
event: Das Maus-Event event: Das Maus-Event
thumbnail: Das geklickte Thumbnail-Label thumbnail: Das geklickte Thumbnail-Label
""" """
print(f"Thumbnail {thumbnail.objectName()} wurde angeklickt: {event}") print(f"Thumbnail {thumbnail.objectName()} wurde angeklickt: {event}")
# Zum entsprechenden Vollbild scrollen # Zum entsprechenden Vollbild scrollen
full_image = self.thumbnail_to_full_image.get(thumbnail) full_image = self.thumbnail_to_full_image.get(thumbnail)
if full_image: if full_image:
self.ui.scrollArea_2.ensureWidgetVisible(full_image) self.ui.scrollArea_2.ensureWidgetVisible(full_image)
def apply_zoom(self, zoom_value): def apply_zoom(self, zoom_value):
""" """
Wendet den Zoom-Faktor auf alle Bilder im rechten Panel an. Wendet den Zoom-Faktor auf alle Bilder im rechten Panel an.
Args: Args:
zoom_value: Der neue Zoom-Wert (in Prozent) zoom_value: Der neue Zoom-Wert (in Prozent)
""" """
self.current_zoom = zoom_value self.current_zoom = zoom_value
print(f"Zoom geändert auf {zoom_value}%") print(f"Zoom geändert auf {zoom_value}%")
# Wende den Zoom auf alle Bilder an # Wende den Zoom auf alle Bilder an
for fullsize_label, original_pixmap in self.original_pixmaps.items(): for fullsize_label, original_pixmap in self.original_pixmaps.items():
# Berechne die neue Größe basierend auf dem Zoom-Faktor # Berechne die neue Größe basierend auf dem Zoom-Faktor
new_width = int(original_pixmap.width() * zoom_value / 100) new_width = int(original_pixmap.width() * zoom_value / 100)
# Skaliere das Bild und setze es ins Label # Skaliere das Bild und setze es ins Label
scaled_pixmap = original_pixmap.scaledToWidth(new_width, Qt.TransformationMode.SmoothTransformation) scaled_pixmap = original_pixmap.scaledToWidth(
new_width, Qt.TransformationMode.SmoothTransformation
)
fullsize_label.setPixmap(scaled_pixmap) fullsize_label.setPixmap(scaled_pixmap)
# Stelle sicher, dass die horizontale Zentrierung beibehalten wird # Stelle sicher, dass die horizontale Zentrierung beibehalten wird
fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter) fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter)
+5 -3
View File
@@ -1,5 +1,7 @@
import sys import sys
from PySide6.QtWidgets import QApplication from PySide6.QtWidgets import QApplication
from MainWindow import MainWindow from MainWindow import MainWindow
@@ -7,13 +9,13 @@ def main():
"""Haupteinstiegspunkt der Anwendung.""" """Haupteinstiegspunkt der Anwendung."""
# QApplication-Instanz erstellen # QApplication-Instanz erstellen
app = QApplication(sys.argv) app = QApplication(sys.argv)
# Hauptfenster erstellen # Hauptfenster erstellen
window = MainWindow() window = MainWindow()
# Hauptfenster anzeigen # Hauptfenster anzeigen
window.show() window.show()
# Anwendung ausführen und Rückgabewert zurückgeben # Anwendung ausführen und Rückgabewert zurückgeben
return app.exec() return app.exec()