Austauschen eines Bildes mit setPixmap

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
mr_egbert
User
Beiträge: 21
Registriert: Montag 13. Januar 2020, 13:33

Hallo zusammen,

je nach Auswahl in der Kombobox soll im Label lbl_fachraster entweder das Bild "kragfach_links" oder "kragfach_rechts" angezeigt werden.
Offensichtilch geht es so nicht, das Programmstürzt ab. Was mache ich falsch?

Code: Alles auswählen

import sys
from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import (
    QApplication,
    QComboBox,
    QLabel,
    QVBoxLayout,
    QWidget,
)

from PyQt5.QtGui import (
    QPixmap
)

class Fenster(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(400, 600)

        self.cbo_fachraster_typ=QComboBox()
        self.cbo_fachraster_typ.addItem("Kragfach links")
        self.cbo_fachraster_typ.addItem("Kragfach rechts")
        self.cbo_fachraster_typ.addItem("Test-Schaltfläche")
        self.cbo_fachraster_typ.activated[str].connect(self.cbo_fachraster_change)

        pic_kragfach_links = QPixmap(".\kragfach_links.png")
        pic_kragfach_rechts = QPixmap(".\kragfach_rechts.png")

        self.lbl_fachraster = QLabel()
        #self.lbl_fachraster.setText("Kragfach links")
        self.lbl_fachraster.setPixmap(pic_kragfach_links)

        self.layout = QVBoxLayout()
        self.layout.setAlignment(Qt.AlignTop)
        self.layout.addWidget(self.cbo_fachraster_typ)
        self.layout.addWidget(self.lbl_fachraster)

        self.setLayout(self.layout)

    def cbo_fachraster_change(self, item):
        print(item)     #Test
        if item == "Kragfach rechts":
            #self.lbl_fachraster.setText("Kragfach rechts")
            self.lbl_fachraster.setPixmap(pic_kragfach_rechts)
        if item == "Kragfach links":
            #self.lbl_fachraster.setText("Kragfach links")
            self.lbl_fachraster.setPixmap(pic_kragfach_links)
        pass

def main():
    app = QApplication(sys.argv)
    fenster = Fenster()
    fenster.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Viele Grüße
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst dir auch die Bilder merken. Warum glaubst du machst du bei einigen Objekten die du erzeugst

Code: Alles auswählen

self.name = ...
und bei einigen nur

Code: Alles auswählen

name = ...
? Wenn dir der Unterschied bewusst geworden ist, dann sollte sich das Problem loesen lassen.

Und bitte wenn moeglich die auftretende Fehlermeldung ebenfalls posten, das macht unser Leben leichter.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Und am besten gleich statt einzelner Attribute ein Wörterbuch verwenden.
mr_egbert
User
Beiträge: 21
Registriert: Montag 13. Januar 2020, 13:33

Ups. Das war wirklich blöd. Da hatte ich wohl Tomaten auf den Augen.
Vielen Dank für die Antwort.
Und danke auch für den Tipp.

Viele Grüße und ein schönes Wochenende
Antworten