[Python/PyQt] super(..).__init__() funktioniert nicht

Gast #4630911
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
Gast #4631047
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren