Мне нужно приложение Python, которое отображает кучу маленьких портретов и имена под ним. Вот так:
Они должны быть подвижными и редактируемыми (двойным щелчком по тексту).
Я использую PyQt4, поэтому я понял, что проще всего использовать QGraphicsView
и QGraphicsScene
для холста. Итак, я создал подкласс QGraphicsItemGroup
следующим образом:
from PyQt4 import QtCore, QtGui
class Speaker(QtGui.QGraphicsItemGroup):
def __init__(self, name, parent=None):
QtGui.QGraphicsItemGroup.__init__(self, parent)
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
self.text = QtGui.QGraphicsTextItem(name)
self.text.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
self.addToGroup(self.text)
self.portrait = QtGui.QGraphicsPixmapItem(QtGui.QPixmap("portrait.png"))
self.portrait.setY(-35)
self.addToGroup(self.portrait)
def keyPressEvent(self, QKeyEvent):
# Forwarding KeyPress events to the text to enable text editing
self.text.keyPressEvent(QKeyEvent)
Но есть некоторые проблемы:
- Редактирование текста запускается одним щелчком мыши, но мне нужен двойной щелчок (может быть дубликат это).
- Вы не можете использовать мышь для выбора текста или перемещения курсора, потому что при этом перемещается вся группа.
- Если вы остановите редактирование, курсор не исчезнет. (Хотя я знаю, как это сделать, если найду способ активировать и деактивировать режим редактирования)
Я попытался поймать сигнал двойного щелчка и переключиться в режим редактирования, который перенаправляет все события мыши в текст. Но я не смог активировать процесс редактирования с помощью двойного щелчка, и, кроме того, я не смог сохранить поведение, чтобы завершить редактирование, щелкнув в другом месте.
Поэтому я надеюсь, что кто-то может мне помочь. Может быть достаточно знать, как вручную активировать и деактивировать режим текстового взаимодействия QGraphicsTextItem
. Спасибо!