I am new to Python. I have drawn polygon and circle with fixed coordinates. Now I want to move this polygon and circle using mouse to some other place on window. Please guide me how can I do it?
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyFrame(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self)
def paintEvent(self, event=None):
paint=QPainter(self)
paint.setPen(QPen(QColor(Qt.green).dark(150),1,Qt.SolidLine))
segColor=QColor(Qt.green).dark(150)
paint.setBrush(segColor)
paint.setBrushOrigin(QPoint(225,225))
polygon=QPolygon([QPoint(250,175), QPoint(265,175), QPoint(250,190), QPoint(265,190),QPoint(250,175)])
paint.drawPolygon(polygon)
paint.setPen(QPen(QColor(Qt.red),1,Qt.SolidLine))
paint.setBrush(QBrush(Qt.NoBrush))
polygon1=QPolygon([QPoint(250,300), QPoint(250,500), QPoint(350,500), QPoint(350,300)])
paint.drawPolyline(polygon1)
paint.drawEllipse(50,50,50,50)
app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()
You should look into the QGraphicsView instead of what you are doing, it has this all built in already.
http://doc.qt.nokia.com/4.7-snapshot/qgraphicsview.html
http://doc.qt.nokia.com/4.7-snapshot/qgraphicsscene.html
from PyQt4 import QtGui, QtCore
class MyFrame(QtGui.QGraphicsView):
def __init__( self, parent = None ):
super(MyFrame, self).__init__(parent)
self.setScene(QtGui.QGraphicsScene())
# add some items
x = 0
y = 0
w = 45
h = 45
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
brush = QtGui.QBrush(pen.color().darker(150))
item = self.scene().addEllipse(x, y, w, h, pen, brush)
item.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
if ( __name__ == '__main__' ):
app = QtGui.QApplication([])
f = MyFrame()
f.show()
app.exec_()
Edit: Showing how to create a QPainterPath
from PyQt4 import QtGui, QtCore
class MyFrame(QtGui.QGraphicsView):
def __init__( self, parent = None ):
super(MyFrame, self).__init__(parent)
scene = QtGui.QGraphicsScene()
self.setScene(scene)
# add some items
x = 0
y = 0
w = 45
h = 45
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
brush = QtGui.QBrush(pen.color().darker(150))
item = scene.addEllipse(x, y, w, h, pen, brush)
item.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
# create an open path
path = QtGui.QPainterPath()
path.moveTo(-w, -h)
path.lineTo(-w, h)
path.lineTo(w, h)
path.lineTo(w, -h)
clr = QtGui.QColor('blue')
clr.setAlpha(120)
brush = QtGui.QBrush(clr)
pen = QtGui.QPen(QtCore.Qt.NoPen)
fill_item = scene.addRect(-w, y, w*2, h, pen, brush)
path_item = scene.addPath(path)
if ( __name__ == '__main__' ):
app = QtGui.QApplication([])
f = MyFrame()
f.show()
app.exec_()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With