当我将QGraphicsTextItem添加到场景中时,我想要的是在QGraphicsView中出现QLineEdit。行编辑仅用于在双击时设置QGraphicsItem的文本,并且在按下返回键时需要删除。
我无法删除QLineEdit。我在按下返回键时尝试删除它但仍然没有删除它。以下是重现此行为的代码:
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_())
我正在尝试通过del self
方法中的returnPressed
删除子类化的QLineEdit。我还尝试在del self.nameEditProxy
类的mouseDoubleClick
方法中通过Text
删除包含它的QGraphicsProxyWidget。
我的问题是如何在returnPressed上删除QLineEdit?
答案 0 :(得分:1)
在Qt中,从屏幕上删除小部件的一种简单方法是隐藏它们,即如果你不担心它;也许你只是想摆脱它,否则使用
myWidget.setVisible(False)
或
myWidget.hide();
您可以通过调用
重用该小部件myWidget.setVisible(True)
或
myWidget.show()
然后将其重新定位到您想要的任何位置。