2016-06-06 28 views
0

Ich versuche, eine Variable von einer Klasse in einer anderen zu verwenden, aber ich habe den Fehler, "run() 1 erforderlich Positions Argument fehle: 'MyWindowClass'"Zugriff auf Variable von einer anderen Klasse

class TaskThread(QtCore.QThread): 
    updateProgressSignal = QtCore.pyqtSignal(int) 
    def run(self, MyWindowClass): 
     for i in range(101): 
      self.updateProgressSignal.emit(i) 
      print (MyWindowClass.pbTimeUpdate) 
      time.sleep(MyWindowClass.pbTimeUpdate) 

class MyWindowClass(QtGui.QDialog): 
    def __init__(self, *args): 
     super(MyWindowClass, self).__init__(*args) 
     self.pbTimeUpdate = .2 
     self.myLongTask = TaskThread() 
     self.myLongTask.updateProgressSignal.connect (self.onProgress) 
     self.myLongTask.start() 

    def onProgress (self, val) 
     print (val) 

I habe versucht, die Variable global zu machen (außerhalb beider Klassen in derselben Datei deklariert), aber den Variablenwert in einer Klasse zu aktualisieren, die andere Klasse sieht immer noch den ursprünglichen Wert)

Was könnte das Problem sein?

+0

Du nennst 'TaskThread.run' ohne Argumente irgendwo, aber es erwartet mit 1 Positions Argument aufgerufen werden, z.B. * MyWindowClass *, der den globalen Namen, der auf die Klasse verweist, mit Schatten versehen würde. Da 'MyWindowClass' gemäß Ihrem Beispiel global ist, lassen Sie das Argument einfach aus' def run (self, MyWindowClass): '. –

+0

Bitte teilen Sie die gesamte Stack-Trace/Fehlermeldung und den Code, auf den sich bezieht. Wir müssen den fehlgeschlagenen Aufruf von 'run()' sehen – skrrgwasme

+0

Nicht sicher, ob es das gleiche ist, aber ich rufe nicht auf, ich rufe an ... Ich erstelle die Aufgabe und starte diesen Weg: self.myLongTask = TaskThread() self.myLongTask.updateProgressSignal.connect (self.onProgress), self.myLongTask.start() .. Dieser Teil funktioniert, der TaskThread startet an dieser Stelle. Ich habe gerade versucht, def run (self) auszuführen, bekomme aber einen Fehler, dass MyWindowClass nicht das pbTimeUpdate-Attribut hat. – ben

Antwort

1

sollte diese Arbeit:

class MyWindowClass(QtGui.QDialog): 
    pbTimeUpdate = .2 

class TaskThread(QtCore.QThread): 
    updateProgressSignal = QtCore.pyqtSignal(int) 

    def run(self): 
     for i in range(101): 
      self.updateProgressSignal.emit(i) 
      print(MyWindowClass.pbTimeUpdate) 
      time.sleep(MyWindowClass.pbTimeUpdate) 
+0

In dieser Reihenfolge und mit nur dem run (self) ändert sich der Fehler in: AttributeError: type object 'MyWindowClass' hat kein Attribut 'pbTimeUpdate'. Es ist eindeutig da, warum erkennt es es nicht? – ben

+0

Ja, weil Sie brauchen und Instanz von MyWindowClass, da dieses Attribut in __init__ nicht als ein Attribut auf Klassenebene –

+0

meine Antwort aktualisiert wird, sollte dies funktionieren –

Verwandte Themen