ich habe ein QGraphicsRectItem in eine GraphicsItemGroup eingefügt. in eine Scene habe ich 2 GraphicsItemGroups plaziert, die durch einen Mausklick selektiert werden können (blau umrandet)
Die beiden Gruppen sollen später als Bereiche dienen, in denen weitere Items abgelegt werden.
Wenn eine der Gruppen selektiert ist, soll die Größe des beinhalteten QGraphicsRectItem durch drücken der Taste + vergrößert werden.
Bei der linken Group funktioniert es wunderbar, aber wenn ich die rechte Group vergrößern möchte, stimmt die Umrandung nicht und die
ganze Grafik hat ein aus meiner Sicht undefiniertes Verhalten.
Einen Teil des Codes habe ich angehängt.
Kann jemand nachvollziehen, warum die Selektion der rechten Group "springt"?
Danke schon mal im voraus
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*
from PyQt4 import QtGui, QtCore
import sys
import math
class CardLayoutArea(QtGui.QGraphicsItemGroup):
def __init__(self, position, cardtext, observerName, category):
super(CardLayoutArea, self).__init__()
self.setFlags(QtGui.QGraphicsItem.ItemIsSelectable |
QtGui.QGraphicsItem.ItemAcceptsInputMethod)
self.position=position
self.cardtext=cardtext
self.layoutTextBox=None
self.line=None
self.initCategoryArea()
self.name = observerName
self.boxColor= QtGui.QColor(QtCore.Qt.white)
def increaseAreaWidth(self):
"""
Der Kategoriebereich wird um 10 px verbreitert
"""
self.setPos(self.position)
rectBox=self.boardarea.boundingRect()
self.boardarea.setRect(0, 0, rectBox.width()+10, rectBox.height())
self.addToGroup(self.boardarea)
self.update(rectBox)
def arangeBox(self, atype):
if atype=='+':
self.increaseAreaWidth()
elif atype=='-':
self.decreaseAreaWidth()
def initCategoryArea(self):
self.boardarea= QtGui.QGraphicsRectItem()
rectBox=QtCore.QRectF(self.position.x(),self.position.y(), 300, 1200)
self.boardarea.setRect(rectBox)
self.addToGroup(self.boardarea)
def paint(self, painter, option, widget=None):
if self.isSelected():
painter.setPen(QtGui.QPen(QtCore.Qt.blue, 2, QtCore.Qt.SolidLine))
SelRec=self.boundingRect()
mRec=QtCore.QRectF(SelRec)
painter.drawRect(mRec)
QtGui.QGraphicsItemGroup.paint(self, painter, option, widget)
class SceneoMode:
insertitem=0
selectitem=2
line=3
layoutnode=4
class ReviewScene(QtGui.QGraphicsScene):
InsertItem, InsertCircle, InsertLine, MoveItem = range(4)
def __init__(self, parent=None):
super(ReviewScene, self).__init__(parent)
self.myMode=None
#self.listOfItemsInBoard={}
self.myItemColor = QtCore.Qt.white
self.myTextColor = QtCore.Qt.black
self.myLineColor = QtCore.Qt.black
self.myFont = QtGui.QFont()
self.selectedCategoryArea=None
self.area= CardLayoutArea(QtCore.QPointF( 10,70),'Tatsachen',"1","1")
self.areaFact= CardLayoutArea(QtCore.QPointF( 420,70),'Ereignisse',"2","2")
self.addItem(self.areaFact)
self.addItem(self.area)
self.setMode(SceneoMode.selectitem)
def setMode(self, mode):
self.myMode = mode
def mousePressEvent(self, mouseEvent):
if self.myMode==SceneoMode.selectitem:
for sitem in self.selectedItems():
if isinstance(sitem, CardLayoutArea):
self.selectedCategoryArea=sitem
print self.selectedCategoryArea.cardtext
QtGui.QGraphicsScene.mousePressEvent(self, mouseEvent)
def keyPressEvent(self, event ):
key = event.key()
if self.selectedCategoryArea!=None:
if key == QtCore.Qt.Key_Minus:
self.selectedCategoryArea.arangeBox('-')
if key == QtCore.Qt.Key_Plus:
self.selectedCategoryArea.arangeBox('+')
class MainWindow(QtGui.QMainWindow):
"""
Hauptfenster der Anwendung Logframe
"""
def __init__(self):
"""
Initialisierung des Hauptfensters für die Anwendung.
"""
QtGui.QMainWindow.__init__(self)
self.prevPoint = QtCore.QPoint()
self.resize(800, 600)
self.setWindowTitle("Titel")
self.createActions()
self.createMenuBar()
#Zeichenbereich aufbauen
self.scene = ReviewScene()
self.scene.setSceneRect(QtCore.QRectF(0, 0, 5000, 5000))
self.view = QtGui.QGraphicsView(self.scene)
layout = QtGui.QHBoxLayout()
self.view = QtGui.QGraphicsView(self.scene)
self.view.scrollContentsBy(30,30)
layout.addWidget(self.view)
self.widgetGraphicsview = QtGui.QWidget()
self.widgetGraphicsview.setLayout(layout)
self.widgetGraphicsview.setEnabled(True)
self.setCentralWidget(self.widgetGraphicsview)
def createMenuBar(self):
"""
Programmenü wird aufgebaut
"""
#Action Anwendung beenden
exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&beenden', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(QtGui.qApp.quit)
def createActions(self):
self.exitAction = QtGui.QAction("E&xit", self, shortcut="Ctrl+X",
statusTip="Quit Scenediagram example", triggered=self.close)
app = QtGui.QApplication(sys.argv)
dialog = MainWindow()
dialog.show()
sys.exit(app.exec_())