import sys
from PyQt4 import QtGui,QtCore
x=-40
y=0
z=0
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.scene=QtGui.QGraphicsScene(self)
self.item=[]
self.item2=[]
myLine=QtGui.QGraphicsLineItem(-10,20,20,20)
myLine.setCursor(QtCore.Qt.CrossCursor)
self.scene.addItem(myLine)
myLine.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
self.setScene(self.scene)
def keyPressEvent(self,event):
global x
global y
global z
if event.key()==QtCore.Qt.Key_Left:
self.item.append(QtGui.QGraphicsRectItem(x,-10,40,40))
self.scene.addItem(self.item[y])
x=x+10
self.item[y].setFlag(QtGui.QGraphicsItem.ItemIsMovable)
y=y+1
elif event.key()==QtCore.Qt.Key_Right:
self.item2.append(QtGui.QGraphicsEllipseItem(x,-10,40,40))
self.scene.addItem(self.item2[z])
x=x+10
self.item2[z].setFlag(QtGui.QGraphicsItem.ItemIsMovable)
z=z+1
def mousePressEvent(self , event):
self._start=event.pos()
def mouseReleaseEvent(self,event):
start = QtCore.QPointF(self.mapToScene(self._start))
end = QtCore.QPointF(self.mapToScene(event.pos()))
self.scene.addItem(
QtGui.QGraphicsLineItem(QtCore.QLineF(start, end)))
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
view= MyView()
view.show()
sys.exit(app.exec_())
正如你所见,我不能移动矩形和椭圆,因为鼠标按下事件,它是画一条线
我想既能拖拉又能画一条线
当按在图形项上时,它应该以其他方式拖动它应该画线
使用
mousePressEvent()
中的if itemAt(event.pos) is None:
确定单击是否发生在QGraphicsItem
上。在该方法中设置状态标志self.__dragging = the_item
,以便可以在mouseMoveEvent()
和mouseReleaseEvent()
中确定是拖动对象(self.__dragging is not None
)还是绘制直线(self.__dragging is None
)。你知道吗相关问题 更多 >
编程相关推荐