Advertisement
Guest User

Untitled

a guest
Aug 24th, 2012
1,045
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. from PyQt4 import QtGui, QtCore, Qt
  3. import math
  4.  
  5. class Example(QtGui.QWidget):
  6.    
  7.     def __init__(self):
  8.         super(Example, self).__init__()
  9.        
  10.         self.setGeometry(0, 0,700,700)
  11.         self.move(300, 200)
  12.         self.setWindowTitle('Dial Guage')
  13.  
  14.         layout = QtGui.QVBoxLayout(self)
  15.         lbl = QtGui.QLabel("A Label")
  16.         layout.addWidget(lbl)
  17.  
  18.         self.gauge = GaugeWidget(1.0)
  19.         self.gauge.setSizePolicy(QtGui.QSizePolicy(
  20.             QtGui.QSizePolicy.Expanding,
  21.             QtGui.QSizePolicy.Expanding))
  22.         layout.addWidget(self.gauge)
  23.  
  24.  
  25. class GaugeWidget(QtGui.QWidget):
  26.  
  27.     def __init__(self, initialValue=0, *args, **kwargs):
  28.         super(GaugeWidget, self).__init__(*args, **kwargs)
  29.         self._bg = QtGui.QPixmap("speedo4.png")
  30.         self.setValue(initialValue)
  31.  
  32.     def setValue(self, val):
  33.         val = float(min(max(val, 0), 1))
  34.         self._value = -270 * val
  35.         self.update()
  36.  
  37.     def paintEvent(self, e):
  38.         painter = QtGui.QPainter(self)
  39.         painter.setRenderHint(painter.Antialiasing)
  40.         rect = e.rect()
  41.  
  42.         gauge_rect = QtCore.QRect(rect)
  43.         size = gauge_rect.size()
  44.         pos = gauge_rect.center()
  45.         gauge_rect.moveCenter( QtCore.QPoint(pos.x()-size.width(), pos.y()-size.height()) )
  46.         gauge_rect.setSize(size*.9)
  47.         gauge_rect.moveCenter(pos)
  48.  
  49.         refill_rect = QtCore.QRect(gauge_rect)
  50.         size = refill_rect.size()
  51.         pos = refill_rect.center()
  52.         refill_rect.moveCenter( QtCore.QPoint(pos.x()-size.width(), pos.y()-size.height()) )
  53.         # smaller than .9 == thicker gauge
  54.         refill_rect.setSize(size*.9)
  55.         refill_rect.moveCenter(pos)
  56.  
  57.         painter.setPen(QtCore.Qt.NoPen)
  58.  
  59.         painter.drawPixmap(rect, self._bg )
  60.  
  61.         painter.save()
  62.         grad = QtGui.QConicalGradient(QtCore.QPointF(gauge_rect.center()), 270.0)
  63.         grad.setColorAt(.75, QtCore.Qt.green)
  64.         grad.setColorAt(.5, QtCore.Qt.yellow)
  65.         grad.setColorAt(.1, QtCore.Qt.red)
  66.         painter.setBrush(grad)
  67.         #painter.drawPie(gauge_rect, 225.0*16, self._value*16)
  68.         painter.drawPie(gauge_rect, 225.0*16, self._value*16)
  69.         painter.restore()
  70.  
  71.         painter.setBrush(QtGui.QBrush(self._bg.scaled(rect.size())))
  72.         painter.drawEllipse(refill_rect)
  73.  
  74.         painter.end()
  75.         super(GaugeWidget,self).paintEvent(e)
  76.        
  77.        
  78. def main():
  79.     app = QtGui.QApplication(sys.argv)
  80.     ex = Example()
  81.     ex.show()
  82.     ex.raise_()
  83.     sys.exit(app.exec_())
  84.  
  85.  
  86. if __name__ == '__main__':
  87.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement