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() |