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

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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.