Objekt aus einer anderen Def heraus ansprechen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Hallo,

habe noch Probleme Objekte aus jeder def heraus anzusprechen.

Code: Alles auswählen

class SMCTool(QWidget):
    def __init__(self, filename, title, parent=None):
        QWidget.__init__(self, parent)
        uic.loadUi('frame.ui', self)
        
        pixmap = QPixmap('.\images\SMC_komplett_AUS.jpg')
        self.status_txt.setPixmap(pixmap)
        self.status_txt.show()
will ich das Image nun aus einer anderen def heraus ändern gibt es Probleme:
NameError: name 'self' is not defined

Code: Alles auswählen

def func_COM3():
    pixmap = QPixmap('.\images\SMC_komplett.jpg')
    self.status_txt.setPixmap(pixmap)
    self.status_txt.show()
Könnte mir jemanden helfen bzw auch erklären warum das so einfach nicht möglich ist?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das ist ja auch eine frei stehende Funktion. Die hat keinen Zustand. Und self bezeichnet das Objekt einer Methode, so wie this in Java, C#, C++ etc.

Das ist auch garantiert in VB nicht anders. Wenn du “func_COM3” (übrigens sehr schlecht benannt. Das es eine Funktion ist, ist eh klar. Und das es COM3 ist nur Zufall) auf status_txt zugreifen lassen willst, muss es Methode von SMCTool werden, und natürlich einen self Parameter bekommen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Naja der Name `self` ist halt nicht definiert. Wo sollte der denn Deiner Meinung nach herkommen? Bei der `__init__()` wird `self` ja als Argument an die Methode übergeben. Ist `func_COM3()` eine Funktion? Falls ja, sollte es vielleicht auch eine Methode auf `SMCTool` sein‽ Und vielleicht möchte man die Dateien nicht jedes mal neu laden, sondern nur einmal in der `__init__()`.

Was ist denn `status_txt` für ein Datentyp? `QIcon`\s kennen mehrere Zustände und für jeden Zustand kann man ein anderes Bild hinterlegen. Man müsste das dann aber in ein vorhandenes Widget einbauen welches einen On/Off-Zustand kennt (Buttons, beispielsweise) oder sich selber eine Klasse dafür schreiben. Wenn man das mit einem Label darstellt, würde ich aber auch da eine eigene Klasse schreiben, die das ganze kapselt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten