Python Tool: PyQt6 load Images

Das nachfolgende Python-Skript visualisiert ein Bild. Es wird dynamisch an die Fenstergröße angepasst. Weiterhin wird das Fenster im Zentrum des Bildschirmes angezeigt.




#!/usr/bin/env python3
# *****************************************************************************
# Grafische Oberfläche (PyQt6) zur Visualisierung von Bildern im gleichen
# Verzeichnis. Verändert man das Fenster, wird dass Bild automatisch angepasst.
# Installation der Abhängigkeit: pip install PyQt6
# Start: python PyQt6_load_Image.py           (c) Hans Busche Datum: 14.07.2026
# *****************************************************************************
import sys
import os
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QLabel
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QWidget
from PyQt6.QtGui import QPixmap
from PyQt6.QtCore import Qt

# *****************************************************************************
# Ein QLabel, das sein Bild automatisch an die eigene Größe anpasst.
# *****************************************************************************
class ScalableImageLabel(QLabel):
    def __init__(self, image_path, parent=None):
        super().__init__(parent)
        self.image_path = image_path
        self.pixmap_source = QPixmap(self.image_path)
        # Verhindert, dass das Label eine Mindestgröße erzwingt
        # und das Fenster blockiert
        self.setMinimumSize(1, 1)
        self.setAlignment(Qt.AlignmentFlag.AlignCenter)

# *****************************************************************************
# Wird automatisch aufgerufen, wenn sich die Größe des Labels ändert.
# Skaliert das Bild passend zur neuen Größe unter Beibehaltung 
# des Seitenverhältnisses
# *****************************************************************************
    def resizeEvent(self, event):
        if not self.pixmap_source.isNull():
            scaled_pixmap = self.pixmap_source.scaled(
                self.size(),
                Qt.AspectRatioMode.KeepAspectRatio,
                Qt.TransformationMode.SmoothTransformation
            )
            self.setPixmap(scaled_pixmap)
        super().resizeEvent(event)

# *****************************************************************************
# current_dir-> das Verzeichnis. Sonnenblume.png wird geladen. Oberfläche bauen.
# *****************************************************************************
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Zentriertes Fenster mit dynamischem Bild")
        self.init_ui()

    def init_ui(self):
        current_dir = os.path.dirname(os.path.abspath(__file__))
        image_path = os.path.join(current_dir, "Sonnenblume.png")
        # 2. Haupt-Widget und Layout erstellen
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)
        # Ein wenig Abstand zum Rand
        layout.setContentsMargins(10, 10, 10, 10)
        # 3. Unser skalierbares Bild-Label hinzufügen
        if os.path.exists(image_path):
            self.image_label = ScalableImageLabel(image_path)
            layout.addWidget(self.image_label)
        else:
            # Fallback, falls das Bild nicht im Ordner liegt
            fallback_label = QLabel(
                f"Bild nicht gefunden!\nBitte lege eine Datei namens\
                      'Sonnenblume.png' in diesen Ordner:\n{current_dir}"
            )
            fallback_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
            layout.addWidget(fallback_label)
        # 4. Standardgröße festlegen und zentrieren
        self.resize(800, 600)
        self.center_on_screen()

    def center_on_screen(self):
        #Platziert das Fenster exakt in der Mitte des aktuellen Bildschirms.
        # Holt die Geometrie des Hauptfensters
        window_geometry = self.frameGeometry()
        # Ermittelt den Bildschirm, auf dem sich der Mauszeiger 
        # befindet (oder den primären Bildschirm)
        screen = QApplication.primaryScreen()
        if screen:
            screen_geometry = screen.availableGeometry()
            # Berechnet den Mittelpunkt des Bildschirms und 
            # verschiebt die Fenstergeometrie dorthin
            screen_center = screen_geometry.center()
            window_geometry.moveCenter(screen_center)
            # Bewegt das tatsächliche Fenster an diese Position
            self.move(window_geometry.topLeft())

# *****************************************************************************
# main
# *****************************************************************************
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
# *****************************************************************************
# Ende
# *****************************************************************************


        
🐍 Skript herunterladen (.py)