Esempio n. 1
0
    def __init__(self, leftFlow=0, rightFlow=0, maxFlow=100, parent=None):
        super(YPipeWidget, self).__init__(parent)

        self.leftSpinBox = QtWidgets.QSpinBox(self)
        self.leftSpinBox.setRange(0, maxFlow)
        self.leftSpinBox.setValue(leftFlow)
        self.leftSpinBox.setSuffix(" l/s")
        self.leftSpinBox.setAlignment(QtCore.Qt.AlignRight
                                      | QtCore.Qt.AlignVCenter)
        self.connect(self.leftSpinBox, QtCore.SIGNAL("valueChanged(int)"),
                     self.updateValue)

        self.rightSpinBox = QtWidgets.QSpinBox(self)
        self.rightSpinBox.setRange(0, maxFlow)
        self.rightSpinBox.setValue(rightFlow)
        self.rightSpinBox.setSuffix(" l/s")
        self.rightSpinBox.setAlignment(QtCore.Qt.AlignRight
                                       | QtCore.Qt.AlignVCenter)
        self.connect(self.rightSpinBox, QtCore.SIGNAL("valueChanged(int)"),
                     self.updateValue)

        self.label = QtWidgets.QLabel(self)
        self.label.setFrameStyle(QtWidgets.QFrame.StyledPanel
                                 | QtWidgets.QFrame.Sunken)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        fm = QtGui.QFontMetricsF(self.font())
        self.label.setMinimumWidth(fm.horizontalAdvance(" 999 l/s "))

        self.setSizePolicy(
            QtWidgets.QSizePolicy(
                QtWidgets.QSizePolicy.Expanding,
                QtWidgets.QSizePolicy.Expanding,
            ))
        self.setMinimumSize(self.minimumSizeHint())
        self.updateValue()
Esempio n. 2
0
 def minimumSizeHint(self):
     font = QtGui.QFont(self.font())
     font.setPointSize(font.pointSize() - 1)
     fm = QtGui.QFontMetricsF(font)
     return QtCore.QSize(
         int(fm.horizontalAdvance(FractionSlider.WSTRING) * self.__denominator),
         int((fm.height() * 4) + FractionSlider.YMARGIN),
     )
Esempio n. 3
0
 def paintEvent(self, event=None):
     font = QtGui.QFont(self.font())
     font.setPointSize(font.pointSize() - 1)
     fm = QtGui.QFontMetricsF(font)
     fracWidth = fm.horizontalAdvance(FractionSlider.WSTRING)
     indent = fm.boundingRect("9").width() / 2.0
     if not X11:
         fracWidth *= 1.5
     span = self.width() - (FractionSlider.XMARGIN * 2)
     value = self.__numerator / float(self.__denominator)
     painter = QtGui.QPainter(self)
     painter.setRenderHint(QtGui.QPainter.Antialiasing)
     painter.setRenderHint(QtGui.QPainter.TextAntialiasing)
     painter.setPen(self.palette().color(QtGui.QPalette.Mid))
     painter.setBrush(self.palette().brush(QtGui.QPalette.AlternateBase))
     painter.drawRect(self.rect())
     segColor = QtGui.QColor(QtCore.Qt.green).darker(120)
     segLineColor = segColor.darker()
     painter.setPen(segLineColor)
     painter.setBrush(segColor)
     painter.drawRect(
         FractionSlider.XMARGIN, FractionSlider.YMARGIN, span, fm.height()
     )
     textColor = self.palette().color(QtGui.QPalette.Text)
     segWidth = span / self.__denominator
     segHeight = fm.height() * 2
     nRect = fm.boundingRect(FractionSlider.WSTRING)
     x = FractionSlider.XMARGIN
     yOffset = segHeight + fm.height()
     for i in range(self.__denominator + 1):
         painter.setPen(segLineColor)
         painter.drawLine(x, FractionSlider.YMARGIN, x, segHeight)
         painter.setPen(textColor)
         y = segHeight
         rect = QtCore.QRectF(nRect)
         rect.moveCenter(QtCore.QPointF(x, y + fm.height() / 2.0))
         painter.drawText(rect, QtCore.Qt.AlignCenter, "{}".format(i))
         y = yOffset
         rect.moveCenter(QtCore.QPointF(x, y + fm.height() / 2.0))
         painter.drawText(
             rect, QtCore.Qt.AlignCenter, "{}".format(self.__denominator)
         )
         painter.drawLine(
             QtCore.QPointF(rect.left() + indent, y), QtCore.QPointF(rect.right() - indent, y)
         )
         x += segWidth
     span = int(span)
     y = FractionSlider.YMARGIN - 0.5
     triangle = [
         QtCore.QPointF(value * span, y),
         QtCore.QPointF((value * span) + (2 * FractionSlider.XMARGIN), y),
         QtCore.QPointF((value * span) + FractionSlider.XMARGIN, fm.height()),
     ]
     painter.setPen(QtCore.Qt.yellow)
     painter.setBrush(QtCore.Qt.darkYellow)
     painter.drawPolygon(QtGui.QPolygonF(triangle))
Esempio n. 4
0
 def resizeEvent(self, event=None):
     fm = QtGui.QFontMetricsF(self.font())
     x = (self.width() - self.label.width()) / 2
     y = self.height() - (fm.height() * 1.5)
     self.label.move(x, y)
     y = self.height() / 60.0
     x = (self.width() / 4.0) - self.leftSpinBox.width()
     self.leftSpinBox.move(x, y)
     x = self.width() - (self.width() / 4.0)
     self.rightSpinBox.move(x, y)
Esempio n. 5
0
    def paintEvent(self, event=None):
        LogicalSize = 100.0

        def logicalFromPhysical(length, side):
            return (length / side) * LogicalSize

        fm = QtGui.QFontMetricsF(self.font())
        ymargin = (LogicalSize / 30.0) + logicalFromPhysical(
            self.leftSpinBox.height(), self.height())
        ymax = int(LogicalSize -
                   logicalFromPhysical(fm.height() * 2, self.height()))
        width = int(LogicalSize / 4.0)
        cx, cy = int(LogicalSize / 2.0), int(LogicalSize / 3.0)
        ax, ay = cx - int(2 * width), ymargin
        bx, by = cx - width, ay
        dx, dy = cx + width, ay
        ex, ey = cx + int(2 * width), ymargin
        fx, fy = cx + int(width / 2), cx + int(LogicalSize / 24.0)
        gx, gy = fx, ymax
        hx, hy = cx - int(width / 2), ymax
        ix, iy = hx, fy

        painter = QtGui.QPainter(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        side = min(self.width(), self.height())
        painter.setViewport((self.width() - side) / 2,
                            (self.height() - side) / 2, side, side)
        painter.setWindow(0, 0, LogicalSize, LogicalSize)

        painter.setPen(QtCore.Qt.NoPen)

        gradient = QtGui.QLinearGradient(QtCore.QPointF(0, 0),
                                         QtCore.QPointF(0, 100))
        gradient.setColorAt(0, QtCore.Qt.white)
        a = self.leftSpinBox.value()
        gradient.setColorAt(1, (QtCore.Qt.red if a != 0 else QtCore.Qt.white))
        painter.setBrush(QtGui.QBrush(gradient))
        painter.drawPolygon(
            QtGui.QPolygon([
                QtCore.QPoint(ax, ay),
                QtCore.QPoint(bx, by),
                QtCore.QPoint(cx, cy),
                QtCore.QPoint(ix, iy)
            ]))

        gradient = QtGui.QLinearGradient(QtCore.QPointF(0, 0),
                                         QtCore.QPointF(0, 100))
        gradient.setColorAt(0, QtCore.Qt.white)
        b = self.rightSpinBox.value()
        gradient.setColorAt(1, (QtCore.Qt.blue if b != 0 else QtCore.Qt.white))
        painter.setBrush(QtGui.QBrush(gradient))
        painter.drawPolygon(
            QtGui.QPolygon([
                QtCore.QPoint(cx, cy),
                QtCore.QPoint(dx, dy),
                QtCore.QPoint(ex, ey),
                QtCore.QPoint(fx, fy)
            ]))

        if (a + b) == 0:
            color = QtGui.QColor(QtCore.Qt.white)
        else:
            ashare = int((a / (a + b)) * 255.0)
            bshare = int(255.0 - ashare)
            color = QtGui.QColor(ashare, 0, bshare)
        gradient = QtGui.QLinearGradient(QtCore.QPointF(0, 0),
                                         QtCore.QPointF(0, 100))
        gradient.setColorAt(0, QtCore.Qt.white)
        gradient.setColorAt(1, color)
        painter.setBrush(QtGui.QBrush(gradient))
        painter.drawPolygon(
            QtGui.QPolygon([
                QtCore.QPoint(cx, cy),
                QtCore.QPoint(fx, fy),
                QtCore.QPoint(gx, gy),
                QtCore.QPoint(hx, hy),
                QtCore.QPoint(ix, iy)
            ]))

        painter.setPen(QtCore.Qt.black)
        painter.drawPolyline(
            QtGui.QPolygon([
                QtCore.QPoint(ax, ay),
                QtCore.QPoint(ix, iy),
                QtCore.QPoint(hx, hy)
            ]))
        painter.drawPolyline(
            QtGui.QPolygon([
                QtCore.QPoint(gx, gy),
                QtCore.QPoint(fx, fy),
                QtCore.QPoint(ex, ey)
            ]))
        painter.drawPolyline(
            QtGui.QPolygon([
                QtCore.QPoint(bx, by),
                QtCore.QPoint(cx, cy),
                QtCore.QPoint(dx, dy)
            ]))