たくさんの小さな肖像画とその下に名前を表示する python アプリケーションが必要です。そのように:
それらは移動および編集可能である必要があります (テキストをダブルクリックすることにより)。
私は PyQt4 を使用しているので、キャンバスにaQGraphicsView
と aを使用するのが最も簡単であることがわかりました。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
です。ありがとう!