def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) # Get coordinates for the window size_window = self.size() xcenter = size_window.width() // 2 ycenter = size_window.height() // 2 font = painter.font() metrics = QFontMetrics(font) font_height = metrics.capHeight() width_n = metrics.width("N") width_s = metrics.width("S") width_w = metrics.width("W") width_e = metrics.width("E") extent = min(size_window.width() - width_w - width_e, size_window.height() - 2 * font_height) # Draw labels painter.drawText(xcenter - width_n // 2, ycenter - extent // 2, "N") painter.drawText(xcenter - width_s // 2, ycenter + extent // 2 + font_height, "S") painter.drawText(xcenter - extent // 2 - width_w + 2, ycenter + font_height // 2, "W") painter.drawText(xcenter + extent // 2, ycenter + font_height // 2, "E") # Draw coordinate system diameter = extent - 8 radius = diameter // 2 painter.drawEllipse(xcenter - radius, ycenter - radius, diameter, diameter) diameter23 = diameter * 2 // 3 radius23 = diameter23 // 2 painter.drawEllipse(xcenter - radius23, ycenter - radius23, diameter23, diameter23) diameter13 = diameter // 3 radius13 = diameter13 // 2 painter.drawEllipse(xcenter - radius13, ycenter - radius13, diameter13, diameter13) # Draw satellites brushGps = QBrush(self.get_color("blue")) brushGlonass = QBrush(self.get_color("red")) brushBeidou = QBrush(self.get_color("orange")) brushGalileo = QBrush(self.get_color("green")) sat_radius = 7 for sat in self.satellites_tracked: # Make radius linear in elevation if sat.sv_number in self.satellites_used: r = radius * (180 - 2 * sat.elevation) // 180 if r < 0: r = 0 x = xcenter + int(r * math.sin(sat.azimuth * math.pi / 180.0)) y = ycenter - int(r * math.cos(sat.azimuth * math.pi / 180.0)) if 1*64 <= sat.sv_number < 2*64: brush = brushGlonass elif 2*64 <= sat.sv_number < 3*64: brush = brushBeidou elif 3*64 <= sat.sv_number < 4*64: brush = brushGalileo else: brush = brushGps painter.setBrush(brush) painter.drawEllipse(x - sat_radius // 2, y - sat_radius // 2, sat_radius, sat_radius) painter.end()
def paintEvent(self, event): """Override paint event to additionally paint the current value.""" super().paintEvent(event) self._init_style() text = str(self.value()) rect = self.geometry() painter = QPainter(self) font_metrics = QFontMetrics(self.font()) x = (rect.width() - font_metrics.width(text)) // 2 y = rect.height() - (rect.height() - font_metrics.capHeight()) // 2 painter.drawText(x, y, text)
def update_adjusted(self, font=None): if font is None: font = self.font_family.currentFont() if self.auto_size.isChecked(): font_size = self.font_size.value() font.setPixelSize(font_size) metrics = QFontMetrics(font) rect = metrics.boundingRect(self.edit_text.text()) print('Font:', font.family()) print('Height:', rect.height(), rect.top(), '<->', rect.bottom(), 'CapHeight:', metrics.capHeight(), 'Ascent:', metrics.ascent(), 'FontSize:', font_size) over_ascent = metrics.ascent() - font_size print('OverAscent:', over_ascent) adjusted_size = font_size - over_ascent self.adjusted_size = adjusted_size self.adjusted_size_label.setText( 'Adjusted size: {0}px'.format(adjusted_size)) else: self.adjusted_size_label.setText('')