2015-01-02 9 views
0

Я скопировал некоторые фрагменты кода и сделал свою собственную версию. Первоначальный фрагмент (которого у меня больше нет) позволил переместить, а также выбрать QgraphicsItem. Моя измененная версия позволяет перемещаться, но не выбирать. Что я делаю не так?Почему мой QGraphicsItem не подбирается?

#!d:/python27/python -u 

import sys 
from PyQt4 import QtGui, QtCore 

class GraphicsItem(QtGui.QGraphicsItem): 
    # 
    # QtGui.QGraphicsItem always needs to override its two public abstract methods 
    # paint, boundingRect 
    # 
    def __init__(self, rect=None, parent=None): 
     super(GraphicsItem, self).__init__(parent) 

     self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) 
     self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) 

     self.pen = QtGui.QPen(QtCore.Qt.SolidLine) 
     self.pen.setColor(QtCore.Qt.blue) 
     self.pen.setWidth(8) 
     self.brush = QtGui.QBrush(QtCore.Qt.red) 

     self.rect = QtCore.QRectF(rect[0], rect[1], rect[2], rect[3]) 

    def mouseMoveEvent(self, event): 
     # move object 
     QtGui.QGraphicsItem.mouseMoveEvent(self, event) 

    def boundingRect(self): 
     return self.rect 

    def paint(self, painter, option, widget): 
     painter.setBrush(self.brush) 
     painter.setPen(self.pen) 
     painter.drawEllipse(self.rect) 


class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyMainWindow, self).__init__(parent) 

     width = 1000 
     height = 800 
     scene = QtGui.QGraphicsScene(-width/2, -height/2, width, height) 

     graphicsItem = GraphicsItem((-100, -100, 200, 200)) 
     scene.addItem(graphicsItem) 

     view = QtGui.QGraphicsView() 
     # set QGraphicsView attributes 
     view.setRenderHints(QtGui.QPainter.Antialiasing | 
          QtGui.QPainter.HighQualityAntialiasing) 
     view.setViewportUpdateMode(QtGui.QGraphicsView.FullViewportUpdate) 

     view.setScene(scene) 
     self.setCentralWidget(view) 

    def keyPressEvent(self, event): 
     key = event.key() 

     if key == QtCore.Qt.Key_Escape: 
      sys.exit(QtGui.qApp.quit()) 
     else: 
      super(GraphicsView, self).keyPressEvent(event) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = MyMainWindow() 
    form.setGeometry(700, 100, 1050, 850) 
    form.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 

ответ

1

Вы пропустите этот метод в классе GraphicsItem:

def mousePressEvent(self, event): 
    # select object 
    QtGui.QGraphicsItem.mousePressEvent(self, event) 
    print (self) # show the selected item 
+0

Спасибо большое. Очевидно, я слишком много удалил. – chiefenne

+0

Дополнительный вопрос: когда элемент был выбран, он показал пунктирный ограниченный прямоугольник. Как это можно установить? Должен ли я сам это рисовать? – chiefenne

+0

Вы можете определить параметр в своем методе рисования. Но, пожалуйста, задайте его как новый вопрос с правильным примером :) – renz0fr

Смежные вопросы