Forum: PC-Programmierung [Python/PyQt] super(..).__init__() funktioniert nicht


von Luigi (Gast)


Lesenswert?

Hallo zusammen,

ich verzweifle gerade an folgendem code:
1
from threading import Thread, current_thread
2
from PyQt4 import QtCore, QtGui
3
from PyQt4.QtCore import QObject, pyqtSignal
4
5
import sys
6
7
8
class Test(QObject, Thread):
9
10
    sig = pyqtSignal()
11
12
    def __init__(self, parent=None):
13
        #Thread.__init__(self)
14
        #QObject.__init__(self)
15
        super(Test, self).__init__()
16
        self.daemon = True
17
        self.start()
18
19
        self.sig.connect(sayHello)
20
21
    def run(self):
22
        print "Thread started", current_thread()
23
        sleep(1)
24
        self.sig.emit()
25
        sleep(1)
26
        print "Thread stopped", current_thread()
27
28
29
def sayHello():
30
    print "saying Hello", current_thread()
31
32
t = Test()
33
34
app = QtGui.QApplication(sys.argv)
35
36
w = QtGui.QWidget()
37
w.resize(250, 150)
38
w.move(300, 300)
39
40
w.setWindowTitle('Test')
41
w.show()
42
43
sys.exit(app.exec_())

wenn ich es versuche auszuführen bekomme ich die Fehlermeldung:
1
RuntimeError: Thread.__init__() not called

Hat irgend jemand eine Idee was hier falsch läuft?
Mit den beiden auskommentierten init-Zeilen geht es interessanter weise. 
Aber warum?

Vielen Dank für jeden Tip
liebe Grüße
Luigi

von Luigi (Gast)


Lesenswert?

edit:
habe eine Zeile verloren ;)
1
from time import sleep
das muss noch dazu...

von mh (Gast)


Lesenswert?

Dein super(Test, self).__init__() führt nur den Konstruktor von QObject 
aus... Warum das so ist, kann ich nicht wirklich erklären, nur zwei 
Beispiele liefern.

#1
1
class First(object):
2
  def __init__(self):
3
    print "first"
4
5
class Second(object):
6
  def __init__(self):
7
    print "second"
8
9
class Third(First, Second):
10
  def __init__(self):
11
    super(Third, self).__init__()
12
    print "that's it"
13
    
14
a = Third()

#2
1
class First(object):
2
  def __init__(self):
3
    super(First, self).__init__()
4
    print "first"
5
6
class Second(object):
7
  def __init__(self):
8
    super(Second, self).__init__()
9
    print "second"
10
11
class Third(First, Second):
12
  def __init__(self):
13
    super(Third, self).__init__()
14
    print "that's it"
15
    
16
a = Third()

Das zweite Beispiel macht was Du willst, allerdings wird in den 
Konstruktoren von QObject und Thread kein super().__init__() 
vorkommen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.