QGraphicsTextItem이 장면에 추가 될 때 QLineEdit을 QGraphicsView에 표시하고 싶습니다. 라인 편집은 더블 클릭 할 때 QGraphicsItem의 텍스트를 설정하는 데에만 사용되며 리턴 키를 누를 때 제거해야합니다.ReturnPressed에서 QGraphicsScene에서 QLineEdit 프록시 위젯 제거
QLineEdit을 삭제하는 데 문제가 있습니다. 반환 키를 누를 때 단순히 삭제하려고 시도했지만 여전히 제거되지는 않습니다. 이러한 시도의 returnPressed
방법에 del self
를 통해
class Text(QGraphicsTextItem):
def __init__(self, text, position=QPointF(0,0), parent=None, scene=None):
super().__init__(text, parent=parent, scene=scene)
self.parent = parent
self.setFlag(QGraphicsItem.ItemIsSelectable, True)
self.height = self.document().size().height()
self.width = self.document().size().width()
self.text_center = QPointF(-self.width/2, -self.height/2)
if parent:
self.parent_center = self.parent.boundingRect().center()
self.scene = self.parent.scene
self.setPos(text_center)
else:
self.setFlag(QGraphicsItem.ItemIsMovable)
self.scene = scene
self.setPos(position - self.text_center)
def mouseDoubleClickEvent(self, mouseEvent):
self.Editing = True
self.nameEdit = NameEditor(self)
self.nameEditProxy = self.scene.addWidget(self.nameEdit)
self.nameEditProxy.setPos(self.mapToScene(QPointF(0, 0)))
class NameEditor(QLineEdit):
def __init__(self, textItem):
super().__init__(textItem.toPlainText())
self.setMaximumWidth(200)
self.setFixedWidth(200)
self.selectAll()
self.grabKeyboard()
self.textItem = textItem
def returnPressed(self):
self.textItem.setPlainText(self.text())
del self
if __name__ == "__main__":
app = QApplication(sys.argv)
view = QGraphicsView()
scene = QGraphicsScene()
scene.setSceneRect(0, 0, 500, 500)
view.setScene(scene)
text = Text("Example", position=QPointF(250, 250), scene=scene)
view.show()
sys.exit(app.exec_())
내가 서브 클래 싱 QLineEdit을 삭제하고 다음은이 문제를 재현하는 코드이다. 또한 Text
클래스의 mouseDoubleClick
메서드에서 del self.nameEditProxy
을 통해 QGraphicsProxyWidget을 삭제하려고 시도했습니다.
제 질문은 returnPressed에서 QLineEdit을 어떻게 삭제할 수 있습니까?
아, 그래도 'returnPressed'신호를 아무 것도 연결하지 않은 것처럼 보입니다 (또는 그것에 대해서도 ...). 나는 제안을 좋아하지만 수정 후 주석을 달고 편집 할 것입니다. – pbreach