I am creating an embedded application, and the versions I have to use
presently for Qt and PyQt do not support QGraphicsScene.addWidget().  I
want various scene/view items to be able to interact with others
scene/view items.  I have tried emitting signals from one item to
another, but have not had any success.  After having searched the
literature, posts, and google, I appreciate that this MIGHT not be
practicabl, so I would like to confirm this!  Can you advise me if there
is anyway to get the " intention" of the following code to work?  I
would like, for example, to effect an instance of a QGraphicstextItem
with its setPlainText() method  from another GraphicsItem event such as
from a reimplementation of its .mouseReleaseEvent method:

from PyQt4 import *
from PyQt4.QtGui import*
from PyQt4.QtCore import *
import sys

class text(QGraphicsTextItem):
        def __init__(self):
                QGraphicsTextItem.__init__(self)
                self.setFlag(QGraphicsItem.ItemIsFocusable)
                self.setFlag(QGraphicsItem.ItemIsSelectable)
                self.setTextInteractionFlags(Qt.TextEditable)
                self.setPlainText("0000")
                self.setZValue(3.0)

class marker(QGraphicsItem):
        def __init__(self):
                QGraphicsItem.__init__(self)
                self.setFlag(QGraphicsItem.ItemIsFocusable)
                self.setFlag(QGraphicsItem.ItemIsMovable)

        def boundingRect(self):
                return QRectF(25.0,0.0,25.0,270.0)

        def paint(self, painter, option, widget): 
                ss = painter.drawRect(25.0,230.0,25.0,25.0)
                tt = painter.drawLine(37.5,0.0,37.5,270.0)

        def mouseMoveEvent(self, mouseEvent):
                pt = self.mapToScene(mouseEvent.pos()).x()
                self.setPos(pt-37.5,0)
                self.update()

        def mouseReleaseEvent(self,mouseEvent1):
                dbl = text()
                dbl.setVisible(True)
                dbl.setPlainText("3.333")
                dbl.setFlag(QGraphicsItem.ItemIsFocusable)
                dbl.moveBy(50.0,50.0)
                dbl.update()

class MainScene(QGraphicsScene):
        def __init__(self):
                QGraphicsScene.__init__(self)
                self.setSceneRect(0.0,0.0,480,270)
                item,item1 = text(),marker()
                self.addItem(item),     self.addItem(item1)
                
class AllItemsView(QGraphicsView):
        def __init__(self):
                QGraphicsView.__init__(self)
                self.setWindowTitle("Text")
                self.setInteractive(True)
                self.setEnabled(True)
                self.scene = MainScene()
                self.mainScene = MainScene()
                self.setScene(self.mainScene)
                
if __name__=="__main__":
        app = QApplication(sys.argv)
        view = AllItemsView()   
        view.show()
        sys.exit(app.exec_())

The two items appear and work fine, but it is impossible to change the
contents of the text instance from the marker item.  Thanks for any
comments on this problem!

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to