View difference between Paste ID: yN3B3fc2 and i4YZN0JS
SHOW: | | - or go back to the newest paste.
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.initUI()
10+
        self.setGeometry(0, 0,700,700)
11
        self.move(300, 200)
12-
    def initUI(self):      
12+
13
14-
        hbox = QtGui.QHBoxLayout(self)
14+
        layout = QtGui.QVBoxLayout(self)
15-
        #dial = QtGui.QPixmap("speedo4.png")
15+
        lbl = QtGui.QLabel("A Label")
16
        layout.addWidget(lbl)
17-
        lbl = QtGui.QLabel(self)
17+
18
        self.gauge = GaugeWidget(1.0)
19
        self.gauge.setSizePolicy(QtGui.QSizePolicy(
20-
        hbox.addWidget(lbl)
20+
            QtGui.QSizePolicy.Expanding, 
21-
        self.setLayout(hbox)
21+
            QtGui.QSizePolicy.Expanding))
22-
        self.setGeometry(0, 0,600,600)
22+
        layout.addWidget(self.gauge)
23
24
25
class GaugeWidget(QtGui.QWidget):
26-
        self.show()   
26+
27
    def __init__(self, initialValue=0, *args, **kwargs):
28
        super(GaugeWidget, self).__init__(*args, **kwargs)
29-
        painter = QtGui.QPainter()
29+
        self._bg = QtGui.QPixmap("speedo4.png")
30-
        painter.begin(self)
30+
        self.setValue(initialValue)
31-
        dial = QtGui.QPixmap("speedo4.png")
31+
32
    def setValue(self, val):
33-
        #painter.drawPixmap(50, 50, 600, 600, dial)
33+
        val = float(min(max(val, 0), 1))
34
        self._value = -270 * val
35
        self.update()
36
37-
        #rect = QtCore.QRect(50,50,600,600)
37+
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-
        painter.drawPixmap(rect, dial)
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-
        painter.drawPie(gauge_rect, 225.0*16, -270*1*16)
65+
66
        painter.setBrush(grad)
67
        #painter.drawPie(gauge_rect, 225.0*16, self._value*16)
68-
        painter.setBrush(QtGui.QBrush(dial.scaled(rect.size())))
68+
        painter.drawPie(gauge_rect, 225.0*16, self._value*16)
69
        painter.restore()
70
71-
        super(Example,self).paintEvent(e)
71+
        painter.setBrush(QtGui.QBrush(self._bg.scaled(rect.size())))
72
        painter.drawEllipse(refill_rect)
73-
       
73+
74
        painter.end()
75-
 
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()