from __future__ import division

import sys
from PyQt4 import QtCore, QtGui

class Polygon( QtGui.QGraphicsItem ):

	radius = 20
	def __init__(self):
		super(Polygon, self).__init__()
		self.points = []
		
	def addpoint( self, point ):
		self.points.append( point )
		
	def paint(self, painter, option, widget):
		painter.setBrush( QtCore.Qt.red  )
		painter.drawEllipse( self.points[0], self.radius/2, self.radius/2 )

	def boundingRect( self ):
		if len( self.points ) == 1:
			rect = QtCore.QRectF(	self.points[0].x()-self.radius, 
									self.points[0].y()-self.radius,
									self.points[0].x()+self.radius, 
									self.points[0].y()+self.radius )
			return rect

class MainWidget(QtGui.QWidget):
	poly_drawing = False
	def __init__(self):
		super(MainWidget, self).__init__()
		self.initUI()

	def initUI(self):
		self.scene = QtGui.QGraphicsScene()
			
		self.img = QtGui.QPixmap( 'big.jpg' )
			
		self.view = QtGui.QGraphicsView( self.scene )
		self.view.setRenderHint( QtGui.QPainter.Antialiasing )
		self.view.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff )
		self.view.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff )

		self.pixmap_item = QtGui.QGraphicsPixmapItem( self.img, None, self.scene)
		self.pixmap_item.mousePressEvent = self.pixelSelect
					
		self.mypoly = Polygon()

		layout = QtGui.QVBoxLayout()
		layout.addWidget( self.view )
		self.setLayout( layout )
		self.resize( 1200, 900 )
		self.show()

	def resizeEvent(self, event):
		w_scale = self.view.width() / self.img.width()
		h_scale = self.view.height() / self.img.height()
		scale = min( w_scale, h_scale)
		
		self.view.resetMatrix()
		self.view.scale( scale, scale )

	def pixelSelect( self, event ):
		point = event.pos()
		self.mypoly = Polygon()
		self.scene.addItem( self.mypoly )
		self.mypoly.addpoint( point )

def main():
	
	app = QtGui.QApplication(sys.argv)
	ex = MainWidget()
	sys.exit(app.exec_())


if __name__ == '__main__':
	main()
