#!/usr/bin/python # -*- coding: utf-8 -*- """ Created on Mon Mar 09 19:03:17 2015 @author: djohn89 """ from PyQt4 import QtCore, QtGui from math import cos, sin, pi, sqrt, tan # drawing area is (-1,1) x (-1,1) in logical coordinates W = 500 H = 500 # #def xToPix(x): # return (x*W/2+W/2 + 1) # #def yToPix(y): # return (H/2-y*H/2 + 1) # def degTo16(d): return int(16*d) # #def radTo16(ra): # return int(degTo16(ra*180/3.14159)) class CirclesWidget(QtGui.QWidget): def __init__(self, parent=None): super(CirclesWidget, self).__init__(parent) self.timer = QtCore.QBasicTimer() self.N = 4 self.pauseCount = 0 self.paused = False self.timer.start(1600, self) # le = 0 # def setLE(le1): # le = le1 def paintEvent(self, event): painter = QtGui.QPainter(self) side = min(self.width(), self.height()) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 2.5, side / 2.5) r = QtCore.QRectF( -1, -1, 2, 2 ) painter.drawArc( r, degTo16(0), degTo16(360) ) pLast = QtCore.QPointF(1, 0) #N = 8 N = self.N if(N > 300): N = 300 # don't draw crazy amounts of points; the GUI will lag br = QtGui.QPen(QtGui.QColor(255, 0, 0)) painter.setPen(br) for i in xrange(1, N): pThis = QtCore.QPointF( cos( 2*pi*float(i)/N ), sin( 2*pi*float(i)/N ) ) painter.drawLine(pLast, pThis) pLast = pThis painter.drawLine(pLast, QtCore.QPointF(1, 0)) #painter.drawText( QtCore.QPointF(-.75, .75), 'len') painter.save() painter.scale(side / 51200.0, side/ 51200.0) font=painter.font() ; font.setPointSize ( 1 ); #font.setWeight(QFont::DemiBold); #painter.setFont(font); #painter.drawText(....); #s = 'LB {0}'.format( N/2 * sqrt( 2 - 2*cos(2*pi/N) ) ) lb = self.N/2.0 * sin( 2.0*pi/float(self.N) ) ub = self.N/2.0 * tan( 2.0*pi/float(self.N) ) if(self.N < 1000): s = 'N={0}, {1:6f}= 30: self.N = 4 self.pauseCount = 0 self.paused = False else: self.pauseCount += 1 else: if (self.N <= 96): self.N += 1 else: self.N = 4 self.update() else: super(CirclesWidget, self).timerEvent(event) def setText(self, newText): try: N1 = int(newText) if(N1 > 3): self.N = N1 self.paused = True self.pauseCount = 20 self.update() except: self.N = 4 self.paused = False self.pauseCount = 0 self.update() def mousePressEvent(self, event): self.N = 4 self.paused = False self.pauseCount = 0 self.update() class Dialog(QtGui.QDialog): def __init__(self, parent=None): super(Dialog, self).__init__(parent) circ = CirclesWidget() lineEdit = QtGui.QLineEdit() layout = QtGui.QVBoxLayout() layout.addWidget(circ) layout.addWidget(lineEdit) self.setLayout(layout) lineEdit.textChanged.connect(circ.setText) self.resize(W,H) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) dialog = Dialog() dialog.show(); sys.exit(app.exec_())