QArrow a widget similar to GtkArrow in PyQt
Recently in Ubuntu One we have been working or using PyQt for the UI of our application so that we could keep a smaller code base. While doing the move I noticed that we needed to have a widget similar to GtkArrow and to my surprise there is not one.
The following is a small implementation fo such a widget that might help other people that are in need of it. Even maybe someone that cares enough will write it in C++ and will propose it to Qt, sorry but I don’t have the time.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from PyQt4.QtGui import QPainter, QStyle, QStyleOption, QWidget class QArrow(QWidget): """Qt implementation similar to GtkArrow.""" UP = 0 DOWN = 1 LEFT = 2 RIGHT = 3 def __init__(self, direction, parent=None): """Create a new instance.""" QWidget.__init__(self, parent) if not direction in (QArrow.UP, QArrow.DOWN, QArrow.LEFT, QArrow.RIGHT): raise ValueError('Wrong arrow direction.') self._direction = direction def paintEvent(self, event): """Paint a nice primitive arrow.""" opt = QStyleOption() opt.initFrom(self) p = QPainter(self) if self._direction == QArrow.UP: primitive = QStyle.PE_IndicatorArrowUp elif self._direction == QArrow.DOWN: primitive = QStyle.PE_IndicatorArrowDown elif self._direction == QArrow.LEFT: primitive = QStyle.PE_IndicatorArrowLeft else: primitive = QStyle.PE_IndicatorArrowRight self.style().drawPrimitive(primitive, opt, p, self) |
Took longer to think the correct way to do it than the actual coding, at the end is very simple.





Pingback: Manuel de la Pena Saenz: QArrow a widget... | Python | Syngu