2013-04-04 6 views
1

Фон: Я пытаюсь сделать griding инструмент с использованием python и pyqt. В частности, я хочу использовать комбинацию graphicsView/graphicsScene, чтобы позволить пользователю размещать и редактировать разделы сетки. В этом контексте сетка представляет собой просто набор перпендикулярных линий.PyQt группировка graphicsScene объектов в один объект

Что-то как:
enter image description here

Вопрос: Как я группа коллекция линий вместе в один объект, так что совокупность линий действует как единый объект (то есть контекстное меню, перетаскивание и т.д. .)

Текущий код: (только графические классы)

from PyQt4 import QtGui, QtCore 

class graphicsView(QtGui.QGraphicsView): 
    def __init__(self,parent=None): 
     super(graphicsView, self).__init__(parent) 
     self.parent=parent 
    def wheelEvent(self,event): 
     super(graphicsView, self).wheelEvent(event) 
     factor = 1.2 
     if event.delta()<0: 
      factor = 1.0/factor 
     self.scale(factor,factor) 

class graphicsScene(QtGui.QGraphicsScene): 
    def __init__(self,parent=None): 
     super(graphicsScene, self).__init__(parent) 
     self.meshPen=QtGui.QPen(QtCOre.Qt.blue, 1, QtCore.Qt.SolidLine) 
    def newGrid(self, xmax,ymax,xcells,ycells,xmin=0,ymin=0): 
     for i in range(xcells+1): 
      x=i*(xmax-xmin)/xcells-abs(xmin) 
      self.addLine(x,ymin,x,ymax,self.meshPen) 
     for j in range(ycells+1): 
      y=j*(ymax-ymin)/ycells-abs(ymin) 
      self.addLine(xmin,y,xmax,y,self.meshPen) 

Система:
Python 2.7.2, PyQt4 4.9.5-2, окна 7


Возможные решения: (мои случайные мысли)

  1. Реализовать невидимый прямоугольник наверх сетка для обработки взаимодействия

ответ

2

Другой способ сделать это QGraphicsItemGroup:

def newGrid(...): 
    group = QtGui.QGraphicsItemGroup(scene=self) 
    group.setFlag(QtGui.QGraphicsItem.ItemIsMovable) #let't test how it works 

    for i in range(xccells + 1): 
     ... 
     group.addToGroup(self.addLine(x,ymin,x,ymax,self.meshPen)) 
    ... 
+0

Nice. Я не понимал, что есть QGraphicsItemGroup. Мне придется попробовать. – Onlyjus