2012-05-24 78 views
2

我想要一個python應用程序,它顯示一堆小肖像和它下面的名字。像這樣: This is how the application looks like編輯QGraphicsTextItem裏面的QGraphicsItemGroup

它們應該是可移動和可編輯的(通過雙擊文本)。

我使用的是PyQt4,所以我想通過使用QGraphicsViewQGraphicsScene作爲畫布是最容易的。所以我子類一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) 

但也存在一些問題:

  • 編輯是由一個單一的點擊觸發的,但我想雙擊(可能是this一式兩份)。
  • 您不能使用鼠標來選擇文本或移動光標,因爲整個組被移動。
  • 如果停止編輯,光標不會消失。 (雖然我知道該怎麼做,如果我找到一個方法來激活和關閉編輯模式)

我試圖抓住雙擊信號,並切換到了所有的鼠標事件轉發到編輯模式文本。但我沒有激活編輯過程雙擊,此外我不能保留行爲結束編輯通過單擊其他地方。

所以我希望有人能幫助我。知道如何手動激活和停用QGraphicsTextItem的文本交互模式可能就足夠了。謝謝!

回答