Was ich tun möchte, ist ein QLineEdit in meiner QGraphicsView erscheinen, wenn ein QGraphicsTextItem der Szene hinzugefügt wird. Die Linienbearbeitung wird nur verwendet, um den Text des QGraphicsItem beim Doppelklick festzulegen, und muss entfernt werden, wenn die Eingabetaste gedrückt wird.Entfernen von QLineEdit Proxy-Widget aus QGraphicsScene auf returnPressed
Ich habe Probleme, die QLineEdit gelöscht werden. Ich habe versucht, es einfach zu löschen, wenn die Return-Taste gedrückt wird, aber es wird immer noch nicht entfernt. Hier ist der Code, um dieses Verhalten zu reproduzieren:
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_())
Ich bin das Unterklasse QLineEdit über del self
im returnPressed
Methode in diesem Versuch zu löschen. Ich habe auch versucht, das QGraphicsProxyWidget zu löschen, das es über del self.nameEditProxy
in der mouseDoubleClick
Methode der Text
Klasse enthält.
Meine Frage ist, wie kann ich den QLineEdit auf returnPressed löschen?
Ah in Ordnung, es sieht so aus, als ob ich das 'returnPressed' Signal nicht an irgendwas angeschlossen habe (oder sogar darüber nachgedacht habe ...). Ich mag den Vorschlag aber und werde nach der Überarbeitung zurückkommen/bearbeiten. – pbreach