I want to emit a signal from a QGraphicsItem
when it is doubled-clicked, in order to change a widget in the main window. The graphics-scene/-item does not provide an emit()
method, but I was just wondering if there is an alternate way to do this. The code below has a function within a QGraphicsView
class that will print to the terminal when an item is double-clicked. How can I make that into a slot/signal instead (if QGraphicsItem
does not support signal/slots)?
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class MyFrame(QGraphicsView):
def __init__( self, parent = None ):
super(MyFrame, self).__init__(parent)
scene = QGraphicsScene()
self.setScene(scene)
self.setFixedSize(500, 500)
pen = QPen(QColor(Qt.green))
brush = QBrush(pen.color().darker(150))
item = scene.addEllipse(0, 0, 45, 45, pen, brush)
item.setPos(0,0)
def mouseDoubleClickEvent(self, event):
print("Circle Clicked!")
# this double click event prints to terminal but how to setup
# signal/slot to update the QWidget QLabel text instead?
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
top = QLabel("Double Click Green Circle (Howto change this QWidget Label with signals?)")
bottom = MyFrame()
splitter = QSplitter(Qt.Vertical)
splitter.addWidget(top)
splitter.addWidget(bottom)
hbox.addWidget(splitter)
self.setLayout(hbox)
self.setGeometry(0, 0, 500, 600)
self.show()
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
itemDoubleClicked
signal on a subclass ofQGraphicsScene
, then doself.scene().itemDoubleClicked.emit()
from the item. – ekhumoroclass GS(QGraphicsScene): itemDoubleClicked = QtCore.pyqtSignal()
. – ekhumoroQGraphicsScene
subclass and set it on the view. – ekhumoro