def draw_pointer_indicator_r(self, painter: QtGui.QPainter): """ 绘制指示器, 样式indicator_r """ radius = 62 offset = 8 painter.save() painter.setOpacity(0.6) # QPolygon 类提供了一个使用整数精度的点向量,QPoint的集合 pts = QtGui.QPolygon() pts.setPoints(3, -offset, 0, offset, 0, 0, radius) painter.rotate(self.start_angle) deg_rotate = (360 - self.start_angle - self.end_angle) / ( self.max_value - self.min_value) * (self.value - self.min_value) painter.rotate(deg_rotate) color = self.percent_color if self.double_percent: center = (self.value == (self.max_value - self.min_value) / 2 + self.min_value) color = self.border_color if center else self.percent_color pen = QtGui.QPen() pen.setColor(pen) painter.setPen(pen) painter.setBrush(color) painter.drawConvexPolygon(pts) # 增加绘制圆角直线,与之前三角形重叠,形成圆角指针 pen.setCapStyle(QtCore.Qt.RoundCap) pen.setWidth(offset - 1) painter.setPen(pen) painter.drawLine(0, 0, 0, radius) painter.restore()
def drawPixmapFor3d(self): self.pixmap3d = QPixmap(self.itemWidth, self.itemHeight) self.pixmap3d.fill(Qt.transparent) painter = QPainter() painter.begin(self.pixmap3d) painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(2) painter.setPen(pen) painter.setBrush(QBrush(QColor(220, 220, 220))) top = [QPoint(5, 10), QPoint(self.itemWidth - 10, 10), QPoint(self.itemWidth - 5, 5), QPoint(10, 5), QPoint(5, 10)] painter.drawConvexPolygon(*top) left = [QPoint(self.itemWidth - 10, 10), QPoint(self.itemWidth - 10, self.itemHeight - 5), QPoint(self.itemWidth - 5, self.itemHeight - 10), QPoint(self.itemWidth - 5, 5), QPoint(self.itemWidth - 10, 10)] painter.drawConvexPolygon(*left) painter.setBrush(QBrush()) painter.drawRect(QRect(5, 10, self.itemWidth - 15, self.itemHeight - 15)) painter.drawText(QRect(5, 10, self.itemWidth - 15, self.itemHeight - 15), Qt.AlignCenter, '3D') painter.end()
def drawPixmapFor3d(self): self.pixmap3d = QPixmap(self.itemWidth, self.itemHeight) self.pixmap3d.fill(Qt.transparent) painter = QPainter() painter.begin(self.pixmap3d) painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(2) painter.setPen(pen) painter.setBrush(QBrush(QColor(220, 220, 220))) top = [ QPoint(5, 10), QPoint(self.itemWidth - 10, 10), QPoint(self.itemWidth - 5, 5), QPoint(10, 5), QPoint(5, 10), ] painter.drawConvexPolygon(*top) left = [ QPoint(self.itemWidth - 10, 10), QPoint(self.itemWidth - 10, self.itemHeight - 5), QPoint(self.itemWidth - 5, self.itemHeight - 10), QPoint(self.itemWidth - 5, 5), QPoint(self.itemWidth - 10, 10), ] painter.drawConvexPolygon(*left) painter.setBrush(QBrush()) painter.drawRect( QRect(5, 10, self.itemWidth - 15, self.itemHeight - 15)) painter.drawText( QRect(5, 10, self.itemWidth - 15, self.itemHeight - 15), Qt.AlignCenter, "3D") painter.end()
def paintEvent(self, QPaintEvent): QAction("Show") painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self._width / 2, self._height / 2) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QBrush(self._pointercolor)) painter.save() painter.rotate((2.88 * self.monitor()) + 216) painter.drawConvexPolygon(self.pointer) painter.restore() painter.setPen(self._textcolor) painter.save() painter.drawText(-10, (self._sidelength / 2), self._monitortext) painter.drawText(-10, (self._sidelength / 2) - 15, str(self.monitor())) painter.restore() painter.save() painter.setPen(self._tickcolor) painter.rotate(126) for i in range(17): painter.drawLine((self._sidelength / 2) - self._ticklength, 0, (self._sidelength / 2), 0) painter.rotate(18) painter.restore()
def draw_pointer_triangle(self, painter: QtGui.QPainter): """ 绘制指示器, 样式triangle """ radius = 25 offset = 40 painter.save() # QPolygon 类提供了一个使用整数精度的点向量,QPoint的集合 pts = QtGui.QPolygon() pts.setPoints(3, -radius / 2, offset, radius / 2, offset, 0, radius + offset) painter.rotate(self.start_angle) deg_rotate = (360 - self.start_angle - self.end_angle) / ( self.max_value - self.min_value) * (self.value - self.min_value) painter.rotate(deg_rotate) color = self.percent_color if self.double_percent: center = (self.value == (self.max_value - self.min_value) / 2 + self.min_value) color = self.border_color if center else self.percent_color painter.setPen(color) painter.setBrush(color) painter.drawConvexPolygon(pts) painter.restore()
def drawPixmapFor3d(self, painter: QPainter, width: int, height: int) -> None: font = QFont() font.setPixelSize(height - 10) pen = QPen() pen.setWidth(2) painter.setPen(pen) painter.setBrush(QBrush(QColor(220, 220, 220))) top = [ QPoint(5, 5), QPoint(width - 10, 5), QPoint(width - 5, 0), QPoint(10, 0), QPoint(5, 5), ] painter.drawConvexPolygon(*top) left = [ QPoint(width - 10, 5), QPoint(width - 10, height - 5), QPoint(width - 5, height - 10), QPoint(width - 5, 0), QPoint(width - 10, 5), ] painter.drawConvexPolygon(*left) painter.setBrush(QBrush()) painter.setFont(font) painter.drawRect(QRect(5, 5, width - 15, height - 10)) painter.drawText(QRect(5, 4, width - 15, height - 10), Qt.AlignCenter, "3D") painter.end()
def fnk(pai: QPainter, sogi: QStyleOptionGraphicsItem, wi=None, offset=(0, 0)): pen = QPen(constants.FOREGROUND_COLOR) bru = QBrush(constants.FOREGROUND_COLOR) pai.setBrush(bru) pai.setPen(pen) verts = [QPointF(x + offset[0], y + offset[1]) for (x, y) in vertices] pai.drawConvexPolygon(*verts)
def drawNeedle(self): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.setPen(Qt.NoPen) painter.setBrush(self.needleColor) painter.rotate(((self.value - self.valueOffset - self.valueMin) * self.scaleAngleSize / (self.valueMax - self.valueMin)) + 90 + self.scaleAngleStartValue) painter.drawConvexPolygon(self.valueNeedle[0])
def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem, widget: QWidget) -> None: visible = self._position in self._game_engine.get_player_visible_tiles( self._game_engine.get_game_history().active_player) if not visible: painter.setOpacity(FOG_OF_WAR_OPACITY) painter.setPen(QPen(Qt.white, 0, Qt.SolidLine)) painter.setBrush(QBrush(QColor(70, 70, 70), Qt.SolidPattern)) corners = self.get_corners() painter.drawConvexPolygon(*corners)
def drawNeedle(self): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.setPen(Qt.NoPen) painter.setBrush(self.needleColor) painter.rotate(( (self.gaugeValue - self.minGaugeValue) * self.gaugeArcAngle / (self.maxGaugeValue - self.minGaugeValue)) + 90 + self.gaugeRotation) painter.drawConvexPolygon(self.needle[0])
def draw_needle(self): painter = QPainter(self) # painter.setRenderHint(QtGui.QPainter.HighQualityAntialiasing) painter.setRenderHint(QPainter.Antialiasing) # Koordinatenursprung in die Mitte der Flaeche legen painter.translate(self.width() / 2, self.height() / 2) painter.setPen(Qt.NoPen) painter.setBrush(self.NeedleColor) painter.rotate(((self.value - self.value_offset - self.value_min) * self.scale_angle_size / (self.value_max - self.value_min)) + 90 + self.scale_angle_start_value) painter.drawConvexPolygon(self.value_needle[0])
def drawNeedle(self): side = min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 256.0, side / 256.0) painter.save() painter.rotate(self.value2angle(self.currValue)) painter.setBrush(Qt.red) painter.drawConvexPolygon(QPointF(0, -2), QPointF(100, 0), QPointF(0, 2), QPointF(-30, 5), QPointF(-30, -5)) painter.setBrush(Qt.black) painter.drawEllipse(QPoint(0, 0), 5, 5) painter.restore()
def get_preview(cls, w, h): pixmap = QPixmap(w, h) pixmap.fill(QColor(0, 0, 0, 0)) painter = QPainter() pen = QPen(QColor(0, 0, 0, 255)) pen.setWidth(2) brush = QBrush() brush.setColor(QColor("#c84737")) brush.setStyle(Qt.SolidPattern) painter.begin(pixmap) painter.setPen(pen) painter.setBrush(brush) painter.drawConvexPolygon(QPoint(w * 0.5, 2), QPoint(w - 2, h * 0.5), QPoint(w * 0.5, h - 2), QPoint(2, h * 0.5)) painter.end() return pixmap
def paintEvent(self, event): side = 0.8 * min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2 / 0.95) painter.scale(side / 200.0 * 0.95, side / 200.0 * 0.95) painter.setPen(Qt.NoPen) painter.setBrush(self.ref_color) painter.save() painter.rotate(self.refValue) painter.drawConvexPolygon(self.hand) painter.restore() painter.setBrush(self.color) painter.save() painter.rotate(self.value - self.refValue) painter.drawConvexPolygon(self.hand) painter.restore() painter.save() painter.setPen(QColor(0, 0, 0)) for i in range(27): painter.drawLine(88, 0, 92, 0) painter.rotate(15) painter.restore() painter.save() painter.setPen(QColor(0, 0, 0)) painter.rotate(0.0) for i in range(9): painter.drawLine(88, 0, 96, 0) painter.rotate(45.0) painter.restore() painter.setPen(QColor(0, 0, 0)) font = painter.font() font.setPointSize(font.pointSize() * 1.2) painter.setFont(font) painter.drawText(QRectF(-7.5, 100, 30, 20), '180°') painter.drawText(QRectF(-5, -110, 35, 20), '0°') painter.drawText(QRectF(-125, -5, 30, 20), '270°') painter.drawText(QRectF(105, -5, 35, 20), '90°')
def paintEvent(self, event): side = min(self.width(), self.height()) time = QTime.currentTime() time = time.addSecs(self.timeZoneOffset * 3600) painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(self.hourColor)) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(self.hourHand) painter.restore() painter.setPen(self.hourColor) for i in range(0, 12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(Qt.NoPen) painter.setBrush(QBrush(self.minuteColor)) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(self.minuteHand) painter.restore() painter.setPen(QPen(self.minuteColor)) for j in range(0, 60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) painter.end()
def paintEvent(self, event): if self.allowed_fun(): p = QPainter(self) p.setPen(Qt.NoPen) w, h = self.width(), self.height() points = [QPoint(0, 0), QPoint(w, 0), QPoint(0, h), QPoint(w, h)] p.setBrush(self.upper) p.drawConvexPolygon(QPolygon(points[:3])) p.setBrush(self.lower) p.drawConvexPolygon(QPolygon(points[1:])) p.setPen(Qt.black) font = QFont('Arial', 8) p.setFont(font) p.drawText(2, 2 + h / 2, get_kana(KANA_X_MAX - 1 - self.col, self.row, KATA)) p.drawText(2 + w / 2, h - 2, get_kana(KANA_X_MAX - 1 - self.col, self.row, HIRA)) else: super().paintEvent(event)
def paintEvent(self, event): global real_time, minotaur_standard_time actual_time_updater() side = min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.hourColor) painter.save() hour_adjust = 30.0 * ( (int(real_time.hour) + int(real_time.minute) / 60.0)) hour = math.floor(hour_adjust / 30.0) painter.rotate(hour_adjust) painter.drawConvexPolygon(AnalogClock.hourHand) painter.restore() painter.setPen(AnalogClock.hourColor) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.minuteColor) painter.save() minute_adjust = 6.0 * ( (int(real_time.minute) + int(real_time.second) / 60.0)) if minute_adjust < 0: minute_adjust += 360 minute = math.floor(minute_adjust / 6.0) painter.rotate(minute_adjust) painter.drawConvexPolygon(AnalogClock.minuteHand) painter.restore() painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.secondColor) painter.save() second_adjust = 6.0 * int(real_time.second) if second_adjust < 0: second_adjust += 360 second = math.floor(second_adjust / 6.0) painter.rotate(second_adjust) painter.drawConvexPolygon(AnalogClock.secondHand) painter.restore() painter.setPen(AnalogClock.minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0)
def paintEvent(self, event): side = min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogPosition.positionHandColor) painter.save() painter.rotate(self.angle) painter.drawConvexPolygon(AnalogPosition.positionHand) painter.restore() painter.setPen(AnalogPosition.positionHandColor) for j in range(32): painter.drawLine(92, 0, 96, 0) painter.rotate(11.25)
def paintEvent(self, event): side = min(self.width(), self.height()) time = QTime.currentTime() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) # Hour hand painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(AnalogClock.hourHand) painter.restore() painter.setPen(AnalogClock.hourColor) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) # Minute hand painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.minuteColor) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(AnalogClock.minuteHand) painter.restore() painter.setPen(AnalogClock.minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) # Second hand painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.secondColor) painter.save() painter.rotate(6.0 * time.second()) painter.drawConvexPolygon(AnalogClock.secondHand) painter.restore()
def paintEvent(self, e): time = QTime.currentTime() qp = QPainter() qp.begin(self) #qp.setRenderHint(QPainter.Antialiasing) # 开启这个抗锯齿,会很占cpu的! qp.translate(self.width() / 2, self.height() / 2) qp.scale(self.side / 200.0, self.side / 200.0) qp.setPen(QtCore.Qt.NoPen) qp.setBrush(self.hourColor) qp.save() qp.rotate(30.0 * ((time.hour() + time.minute()/ 60.0))) qp.drawConvexPolygon(self.hourHand) qp.restore() qp.setPen(self.minuteColor) qp.drawText(0,0,"Testdddddddddddddd") for i in range(12): qp.drawLine(88, 0, 96, 0) qp.rotate(30.0) qp.setPen(QtCore.Qt.NoPen) qp.setBrush(self.minuteColor) qp.save() qp.rotate(6.0 * ((time.minute() + (time.second()+time.msec()/1000.0) / 60.0))) qp.drawConvexPolygon(self.minuteHand) qp.restore() qp.setPen(self.minuteColor) for i in range(60): if (i % 5) is not 0: qp.drawLine(92, 0, 96, 0) qp.rotate(6.0) qp.setPen(QtCore.Qt.NoPen) qp.setBrush(self.secondColor) qp.save() qp.rotate(6.0*(time.second()+time.msec()/1000.0)) qp.drawConvexPolygon(self.secondHand) qp.restore() qp.end()
def paintShape(self, painter: QPainter): painter.setRenderHint(QPainter.Antialiasing) painter.setPen(self.pen()) painter.setBrush(self.brush()) painter.drawConvexPolygon(self._polygon)
def paintEvent(self, event): hourHand = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -40)] minuteHand = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -70)] secondHand = [QPoint(0, 8), QPoint(0, -80)] hourColor = QColor(127, 0, 127) minuteColor = QColor(0, 127, 127, 191) secondColor = QColor(255, 0, 0, 191) side = min(self.width(), self.height()) time = QTime.currentTime() # static function time = time.addSecs(self.timeZoneOffset) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing, True) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) # Draw circle radialGradient = QRadialGradient(0, 0, 100, -40, -40) # center, radius, focalPoint radialGradient.setColorAt(0.0, Qt.white) radialGradient.setColorAt(1., self.backgroundColor) painter.setBrush(radialGradient) painter.setPen(QPen(Qt.darkGray, 0)) # darkGray cosmetic pen painter.drawEllipse(QRectF(-97, -97, 194, 194)) # Draw minute tick painter.setPen(minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) # draw hour hand painter.setPen(Qt.NoPen) painter.setBrush(hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(hourHand) painter.restore() # draw hour tick painter.setPen(hourColor) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) # draw mimute hand painter.setPen(Qt.NoPen) painter.setBrush(minuteColor) painter.save() painter.rotate(6.8 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(minuteHand) painter.restore() # Draw second hand painter.setPen(secondColor) painter.save() painter.rotate(6.0 * time.second()) painter.drawLine(secondHand[0], secondHand[1]) painter.restore() self.updated.emit(time)
def paintEvent(self, event): # 时钟指针坐标点 hourPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -30)] minPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -65)] secPoint = [QPoint(7, 8), QPoint(-7, 8), QPoint(0, -80)] # 时钟指针颜色 hourColor = QColor(200, 100, 0, 200) minColor = QColor(0, 127, 127, 150) secColor = QColor(0, 160, 230, 150) side = min(self.width(), self.height()) painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) # painter坐标系原点移至widget中央 painter.scale(side / 200, side / 200) # 缩放painterwidget坐标系,使绘制的时钟位于widge中央,即钟表支持缩放 # 绘制小时和分钟刻度线 painter.save() for i in range(0, 60): if (i % 5) != 0: painter.setPen(minColor) painter.drawLine(92, 0, 96, 0) # 绘制分钟刻度线 else: painter.setPen(hourColor) painter.drawLine(88, 0, 96, 0) # 绘制小时刻度线 painter.rotate(360 / 60) painter.restore() # 绘制小时数字 painter.save() font = painter.font() font.setBold(True) painter.setFont(font) pointSize = font.pointSize() painter.setPen(hourColor) nhour = 0 radius = 100 for i in range(0, 12): nhour = i + 3 # 按QT-Qpainter的坐标系换算,3小时的刻度线对应坐标轴0度 if nhour > 12: nhour = nhour - 12 x = radius * 0.8 * cos(i * 30 * pi / 180.0) - pointSize y = radius * 0.8 * sin(i * 30 * pi / 180.0) - pointSize / 2.0 width = pointSize * 2 height = pointSize painter.drawText(QRectF(x, y, width, height), Qt.AlignCenter, str(nhour)) painter.restore() time = QTime.currentTime() # 绘制小时指针 painter.save() painter.setPen(Qt.NoPen) # 无轮廓线 painter.setBrush(hourColor) # 填充色 painter.rotate(30 * (time.hour() + time.minute() / 60)) # 每圈360° = 12h 即:旋转角度 = 小时数 * 30° print(time.hour()) painter.drawConvexPolygon(QPolygonF(hourPoint)) painter.restore() # 绘制分钟指针 painter.save() painter.setPen(Qt.NoPen) # 无轮廓线 painter.setBrush(minColor) # 填充色 painter.rotate(6 * (time.minute() + time.second() / 60)) # 每圈360° = 60m 即:旋转角度 = 分钟数 * 6° painter.drawConvexPolygon(QPolygonF(minPoint)) painter.restore() # 绘制秒钟指针 painter.save() painter.setPen(Qt.NoPen) # 无轮廓线 painter.setBrush(secColor) # 填充色 painter.rotate(6 * time.second()) painter.drawConvexPolygon( QPolygonF(secPoint)) # 每圈360° = 60s 即:旋转角度 = 秒数 * 6° painter.restore()
def paintEvent(self, event): global MSG if self._tip: QToolTip.showText(self.mapToGlobal(self._tip), self.digitTime(), self) if self._tb: self._tb.setText(self.digitTime()) side = min(self.width(), self.height()) time = QTime.currentTime() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(AnalogClock.hourHand) painter.restore() painter.setPen(AnalogClock.hourColor) for i in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.minuteColor) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(AnalogClock.minuteHand) painter.restore() painter.setPen(AnalogClock.minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) painter.setPen(Qt.NoPen) painter.setBrush(AnalogClock.secondColor) painter.save() painter.rotate(6.0 * time.second()) painter.drawConvexPolygon(AnalogClock.secondHand) painter.restore() painter.setPen(AnalogClock.secondColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0)
def paintEvent(self, event): side = min(self.width(), self.height()) # 最小边 time = QTime.currentTime() # 获取系统当前时间 painter = QPainter(self) # 抗锯齿 painter.setRenderHint(QPainter.Antialiasing, True) painter.setRenderHint(QPainter.HighQualityAntialiasing, True) painter.setRenderHint(QPainter.SmoothPixmapTransform, True) painter.translate(self.width() / 2, self.height() / 2) # 坐标偏置 # painter.setPen(Qt.NoPen) painter.setBrush(self.hourColor) # 表盘主背景 self.target = QPixmap(self.size()) self.target.fill(Qt.transparent) imgB = self.imgFile p = QPixmap(imgB).scaled(200, 200, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation) path = QPainterPath() path.addRoundedRect(-100, -100, 200, 200, 50, 50) painter.setClipPath(path) painter.drawPixmap(-100, -100, p) # 表盘中心图标 imgM = self.imgFile_M pm = QPixmap(imgM).scaled(50, 50, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation) painter.drawPixmap(-25, -60, pm) # 整点刻度 painter.setPen(self.hourColor) for i in range(12): painter.drawLine(QPointF(85, 0), QPointF(96, 0)) # painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(self.minuteColor) for j in range(60): # 小刻度 if (j % 5) != 0: painter.drawLine(QPointF(85, 0), QPointF(92, 0)) # painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) painter.setPen(Qt.NoPen) painter.setBrush(self.hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(self.hourHand) # 画三角形 painter.restore() painter.setPen(Qt.NoPen) painter.setBrush(self.minuteColor) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(self.minuteHand) painter.restore() painter.setPen(QColor(0, 0, 0)) painter.drawEllipse(-5, -5, 10, 10) # 画圆。参数是外接矩形左上点和长宽
def paintEvent(self, e): qp = QPainter(self) #qp.begin(self) X = self.X Y = self.Y qp.setPen(Qt.black) # mark standing point qp.drawPoint(X, Y) #qp.drawLine(0,self.height/2,self.width, self.height/2) direction = self.direction gamma = self.player.hview alpha = self.player.vview qp.setPen(Qt.green) drawx_counter = 0 last_low = 0 last_high = 0 last_x = 0 #print('angel%d'%direction) for ray in range(1, self.width + 1): # range(-gamma//2, gamma//2+1): theta = gamma / self.width * ray - gamma / 2 x = X y = Y dx = 1 dy = dx * math.tan(math.radians(theta)) qp.setPen(Qt.green) path_counter = 0 while x < self.width and x > -10 and y < self.height and y > -10 and self.level.level[ int(x)][int(y)].high == 0: dt = self.dt if direction >= 0: y = y + dy + dx / dt x = x + dx - dy / dt else: y = y - dy - dx / dt x = x - dx + dy / dt if path_counter % 2 == 0: qp.drawPoint(x, y) path_counter += 1 qp.setPen(Qt.red) qp.drawPoint(x, y) p = abs((y - Y) * math.cos(math.radians(theta - direction))) + abs( (x - X) * math.sin(math.radians(theta - direction))) #p = math.hypot(x - X, y - Y) # slow but more intuitive #p = abs( p * math.cos(math.radians(theta))) if p == 0: continue # the case when player is outside map wall = 60 halfview = abs(p * math.tan(alpha / 2)) if halfview > wall - self.player.height: # ceiling upperview = (wall - self.player.height) / halfview else: # sees entire upper part of wall upperview = 1 / 2 if halfview > self.player.height: # sees floor lowerview = self.player.height / halfview / 2 else: # sees entire lower part of wall lowerview = 1 / 2 #adrawx = round(self.width/gamma * drawx_counter) drawx = drawx_counter #print(self.height/2 + self.height * upperview, self.height/2 - self.height * lowerview) drawy_low = self.height / 2 - self.height * upperview drawy_high = self.height / 2 + self.height * lowerview if drawx_counter > 0: # first line on the left is omitted polygon = QPolygonF() polygon.append(QPointF(last_x, last_low)) polygon.append(QPointF(last_x, last_high)) polygon.append(QPointF(drawx, drawy_high)) polygon.append(QPointF(drawx, drawy_low)) wallcolor = QColor(255, p / self.diagonal * 255, p / self.diagonal * 255) qp.setPen(wallcolor) qp.drawConvexPolygon(polygon) qp.setBrush(QBrush(wallcolor)) last_low = drawy_low last_high = drawy_high last_x = drawx #qp.drawLine(drawx, self.height/2 - self.height * upperview, drawx, self.height/2 + self.height * lowerview) drawx_counter += 1 qp.end()
def paintEvent(self, _: QPaintEvent): hourHand = [QPoint(0, 10), QPoint(3, 6), QPoint(0, -40), QPoint(-3, 6)] minuteHand = [ QPoint(0, 15), QPoint(3, 4), QPoint(0, -70), QPoint(-3, 4) ] secondHand = [ QPoint(0, 20), QPoint(2, 3), QPoint(0, -90), QPoint(-2, 3) ] hourColor = QColor(255, 0, 0) minuteColor = QColor(0, 255, 0, 191) secondColor = QColor(255, 127, 0, 191) side = min(self.width(), self.height()) # time = self._get_ntp_time() time = QTime.currentTime() painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.translate(self.width() / 2, self.height() / 2) painter.scale(side / 200.0, side / 200.0) painter.setPen(Qt.NoPen) painter.setBrush(hourColor) painter.save() painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))) painter.drawConvexPolygon(QPolygon(hourHand)) painter.restore() painter.setPen(hourColor) for _ in range(12): painter.drawLine(88, 0, 96, 0) painter.rotate(30.0) painter.setPen(Qt.NoPen) painter.setBrush(minuteColor) painter.save() painter.rotate(6.0 * (time.minute() + time.second() / 60.0)) painter.drawConvexPolygon(QPolygon(minuteHand)) painter.restore() painter.setPen(minuteColor) for j in range(60): if (j % 5) != 0: painter.drawLine(92, 0, 96, 0) painter.rotate(6.0) painter.setPen(Qt.NoPen) painter.setBrush(secondColor) painter.save() painter.rotate(6.0 * time.second()) painter.drawConvexPolygon(QPolygon(secondHand)) painter.restore()