Точка зрения для объекта в PyQt6

Я действительно новичок в PyQt6. Я хочу нарисовать объект, который перемещается в пространстве и нарисовать вокруг него его точку обзора. Это именно то, что я хочу:

Точка зрения для объекта в PyQt6

И это то, что я получаю до сих пор.

from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.painter = QPainter(self)
        self.setWindowTitle("test 5")
        self.setStyleSheet("background-color:rgb(20, 20, 20);font-size:20px;")
        self.setGeometry(0, 0, 600, 600)

    def paintEvent(self, event):
        self.painter.begin(self)
        self.painter.setPen(QPen(QColor(30, 130, 30),  0, Qt.PenStyle.SolidLine))
        self.painter.setBrush(QBrush(QColor(0, 100, 0), Qt.BrushStyle.SolidPattern))
        self.painter.translate(300, 300)
        self.painter.rotate(-90)
        path = QPainterPath()
        path.moveTo(-20, 0)
        path.lineTo(-30, 15)
        path.lineTo(20, 0)
        path.lineTo(-30, -15)
        path.lineTo(-20, 0)
        self.painter.drawPath(path)
        self.painter.setPen(QPen(QColor(130, 30, 30),  0, Qt.PenStyle.SolidLine))
        self.painter.setBrush(QBrush(QColor(100, 0, 0, 100), Qt.BrushStyle.SolidPattern))
        path = QPainterPath()
        path.moveTo(100, 0)
        path.arcTo(-100, -100, 200, 200, -90 /2 * 16, 180 * 16)
        self.painter.drawPath(path)
        self.painter.end()

if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = Window()
    window.show()
    try:
        sys.exit(App.exec())
    except SystemExit:
        print("closing window ...")

Я хочу нарисовать дугу вокруг объекта, но он рисует полный круг.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете неправильный угол для QPainterPath, который использует градусы, в отличие от QPainter, который использует шестнадцатые доли градуса.

Кроме того, вам нужно использовать arcMoveTo() (не moveTo), чтобы поместить путь в правильное положение при запуске новой дуги.

Наконец, вы должны закрыть путь, используя closeSubpath().

        path = QPainterPath()
        outRect = QRectF(-100, -100, 200, 200)
        path.arcMoveTo(outRect, -60)
        path.arcTo(outRect, -60, 120)
        path.arcTo(-50, -50, 100, 100, 60, 240)
        path.closeSubpath()

        painter.drawPath(path)

Код, который вы предложили, явно работал. А также я узнал больше о Qt. Большое тебе спасибо. Но как мне теперь проверить, есть ли в этом POV что-то вроде точки или объекта?

DSA5252 24.11.2022 08:22

Извините, но это совсем другой вопрос. Кроме того, вы не проверяете «точку или объект» в событии рисования, потому что эта функция отвечает только за рисование. Кроме того, обнаружение столкновений довольно сложный вопрос, для этого существуют расширенные исследования и исследования, и на них нельзя легко ответить.

musicamante 24.11.2022 10:18

Другие вопросы по теме