2016-04-09 8 views
2

Ich versuche, ein Signal von einem erstellten Objekt zu verbinden und erhalte einen Fehler. Hier ist eine vereinfachte Version von meinem Code:PyQt5-Verbindung funktioniert nicht: Element kann in diesem Kontext nicht in PyQt5.QtCore.QObject konvertiert werden

class OverviewWindow(QMainWindow): 
    def __init__(self, projectClusters, users, contributorDict, userLastRevPerProj): 
     QMainWindow.__init__(self) 
     # Code.... 

    def createUserNodes(self): 
     userNodes = {} 
     nodeSpread = 50 
     yPos = -400 
     nodeSpan = nodeSpread + 100 
     width = (len(self.usersFilt) - 1) * nodeSpan 
     xPos = 0 - (width/2) 

     for user in self.usersFilt: 
      newItem = NodeItem(xPos, yPos, self.nodeDiameter, user, True) 
      newItem.nodeDoubleClicked.connect(self.dc) 
      userNodes[user] = newItem 
      self.graphicsScene.addItem(newItem) 
      xPos += nodeSpan 

     return userNodes 

    @pyqtSlot(str) 
    def dc(self, text): 
     print(text) 


class NodeItem(QGraphicsItem): 
    nodeDoubleClicked = pyqtSignal(str) 

    def __init__(self, xPos, yPos, diameter, text, isUserNode): 
     super(NodeItem, self).__init__() 
     # Code... 

    def mouseDoubleClickEvent(self, event): 
     self.nodeDoubleClicked.emit(self.texts) 

Beim Versuch, es führen Sie es mir diesen Fehler geben:

line 84, in createUserNodes 
newItem.nodeDoubleClicked[str].connect(self.dc) 
TypeError: NodeItem cannot be converted to PyQt5.QtCore.QObject in this context 

Ich habe keine Ahnung, was das bedeutet oder wie man es beheben.

+0

Ich habe ein ähnliches Problem, das Sie hatten, war aber nicht in der Lage, es mit super (NodeItem, self) .mouseDoubleClickEvent (Ereignis) zu lösen, könnten Sie Details Ihrer Lösung in einer Antwort bereitstellen? – sunyata

Antwort

5

QGraphicsItem erbt nicht von QObject, daher ist es nicht möglich, ein Signal von einer Instanz von QGraphicsItem zu senden. Sie können dies lösen, indem Sie QGraphicsObject anstelle von QGraphicsItem: http://doc.qt.io/qt-5/qgraphicsobject.html unterklassifizieren.

+0

Mein Programm läuft jetzt. Allerdings stürzt mein Programm bei Doppelklick auf das NodeItem ab und die Qt-Dokumentationsseite scheint ausgefallen zu sein. Danke, aber immer noch sehr hilfreich –

+1

Es stürzte, weil mir Super (NodeItem, self) .mouseDoubleClickEvent (Ereignis) von meiner Funktion fehlte. Es funktioniert jetzt. –

Verwandte Themen