class Compass(QWidget): def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/compass.svg') self.compass = QGraphicsSvgItem() self.compass.setSharedRenderer(svgRenderer) self.compass.setCacheMode(QGraphicsItem.NoCache) self.compass.setElementId('needle') center = self.compass.boundingRect().center() self.compass.setTransformOriginPoint(center.x(), center.y()) bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') self.compass.setPos( bkgnd.boundingRect().width() / 2 - self.compass.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.compass.boundingRect().height() / 2) self.compass.setTransformOriginPoint( self.compass.boundingRect().width() / 2, self.compass.boundingRect().height() / 2) fregnd = QGraphicsSvgItem() fregnd.setSharedRenderer(svgRenderer) fregnd.setCacheMode(QGraphicsItem.NoCache) fregnd.setElementId('foreground') scene = QGraphicsScene() scene.addItem(bkgnd) scene.addItem(self.compass) scene.addItem(fregnd) scene.setSceneRect(bkgnd.boundingRect()) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) super().setLayout(layout) def setHeading(self, hdr): if math.isnan(hdr) == False: hdr *= 180.0 / math.pi self.compass.setRotation(360.0 - hdr) def updateAttitude(self, sourceUAS, timestamp, roll, pitch, yaw): unused(sourceUAS, timestamp, roll, pitch) self.setHeading(yaw) def setActiveUAS(self, uas): uas.updateAttitudeSignal.connect(self.updateAttitude) self.uas = uas
class Battery(QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_currentValue = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 245 self.m_originalWidth = 245 self.m_originalCtr = QPointF(120,120) self.m_faceZ = -20 self.m_caseZ = 10 self.m_markZ = -30 self.m_mark2Z = -30 self.m_mark3Z = -30 self.m_mark4Z = -30 self.m_mark5Z = -30 self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): # os.chdir('/Users/zeyneptuna/Desktop/during_flight/widget/battery') self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace = QGraphicsSvgItem("widget/battery/battery_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue(self.m_faceZ) self.m_itemFace.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemFace.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemFace) self.m_itemCase = QGraphicsSvgItem("widget/battery/battery_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemCase.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemCase) self.m_itemMark = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark.setZValue(self.m_markZ) self.m_itemMark.setPos(57, 120) self.m_itemMark.setScale(0.77) self.m_scene.addItem(self.m_itemMark) self.m_itemMark2 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark2.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark2.setZValue(self.m_mark2Z) self.m_itemMark2.setPos(57, 92.5) self.m_itemMark2.setScale(0.77) self.m_scene.addItem(self.m_itemMark2) self.m_itemMark3 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark3.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark3.setZValue(self.m_mark3Z) self.m_itemMark3.setPos(57, 65) self.m_itemMark3.setScale(0.77) self.m_scene.addItem(self.m_itemMark3) self.m_itemMark4 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark4.setCacheMode(QGraphicsItem.NoCache) self.m_itemMark4.setZValue(self.m_mark4Z) self.m_itemMark4.setPos(57, 37.5) self.m_itemMark4.setScale(0.77) self.m_scene.addItem(self.m_itemMark4) self.m_itemMark5 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark5.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark5.setZValue(self.m_mark5Z) self.m_itemMark5.setPos(57, 10) self.m_itemMark5.setScale(0.77) self.m_scene.addItem(self.m_itemMark5) self.centerOn(self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setCurrentVal(self, val): self.m_currentValue = val def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.m_currentValue = 0 def updateView(self): if self.m_currentValue <= 20: self.m_itemMark2.setZValue(-30) elif self.m_currentValue <= 40: self.m_itemMark3.setZValue(-30) elif self.m_currentValue <= 60: self.m_itemMark4.setZValue(-30) elif self.m_currentValue <= 80: self.m_itemMark5.setZValue(-30) elif self.m_currentValue <= 100: self.m_itemMark.setZValue(20) self.m_itemMark2.setZValue(20) self.m_itemMark3.setZValue(20) self.m_itemMark4.setZValue(20) self.m_itemMark5.setZValue(20) self.m_scene.update()
class Barometer(QWidget): def __init__(self, parent): super().__init__(parent) self.uas = None svgRenderer = QSvgRenderer('res/barometer.svg') bkgnd = QGraphicsSvgItem() bkgnd.setSharedRenderer(svgRenderer) bkgnd.setCacheMode(QGraphicsItem.NoCache) bkgnd.setElementId('background') scene = QGraphicsScene() scene.addItem(bkgnd) scene.setSceneRect(bkgnd.boundingRect()) self.needle = QGraphicsSvgItem() self.needle.setSharedRenderer(svgRenderer) self.needle.setCacheMode(QGraphicsItem.NoCache) self.needle.setElementId('needle') self.needle.setParentItem(bkgnd) self.needle.setPos( bkgnd.boundingRect().width() / 2 - self.needle.boundingRect().width() / 2, bkgnd.boundingRect().height() / 2 - self.needle.boundingRect().height() / 2) self.needle.setTransformOriginPoint( self.needle.boundingRect().width() / 2, self.needle.boundingRect().height() / 2) # textElement = svgRenderer.boundsOnElement('needle-text') self.digitalBaro = QGraphicsTextItem() self.digitalBaro.setDefaultTextColor(QColor(255, 255, 255)) self.digitalBaro.document().setDefaultTextOption( QTextOption(Qt.AlignCenter)) self.digitalBaro.setFont(QFont('monospace', 13, 60)) self.digitalBaro.setParentItem(bkgnd) txm = QTransform() txm.translate( bkgnd.boundingRect().center().x(), bkgnd.boundingRect().height() - 1.5 * self.digitalBaro.document().size().height()) self.digitalBaro.setTransform(txm, False) view = QGraphicsView(scene) view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout = QVBoxLayout() layout.addWidget(view) self.setLayout(layout) self.setBarometer(1000) def setBarometer(self, hbar): deg = ((hbar - 950) * 3 + 210) % 360 self.needle.setRotation(deg) self.digitalBaro.setPlainText('{:.1f}'.format(hbar)) self.digitalBaro.adjustSize() self.digitalBaro.setX(0 - self.digitalBaro.textWidth() / 2) def updateAirPressure(self, sourceUAS, timestamp, absPressure, diffPressure, temperature): unused(sourceUAS, timestamp, diffPressure, temperature) self.setBarometer(absPressure) def setActiveUAS(self, uas): uas.updateAirPressureSignal.connect(self.updateAirPressure) self.uas = uas