メインウィンドウのウィジェットを変更するために、ダブルクリックしたときにQGraphicsItem
から信号を出したいとします。 graphics-scene/-itemはemit()
メソッドを提供していませんが、これを行う別の方法があるかどうかは不思議でした。以下のコードは、項目がダブルクリックされたときに端末に印刷するQGraphicsView
クラス内の関数を持っています。代わりに、スロット/信号にすることができます(QGraphicsItem
が信号/スロットをサポートしていない場合)。PySide/PyQT5:QGraphicsItemからシグナルを放出する方法は?
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()
その後、 '()self.sceneを行い、カスタムの' 'QGraphicsScene'のサブクラスにitemDoubleClicked'信号を定義します。itemDoubleClicked.emit()'項目から。 – ekhumoro
例がありますか? – cvw76
'クラスGS(QGraphicsScene):itemDoubleClicked = QtCore.pyqtSignal()' – ekhumoro