Как код, написанный на PyQt5, сделать под PyQt6?

Рейтинг: 0Ответов: 1Опубликовано: 11.04.2023

Не работает PyQt6.Qt6, в PyQt5 работает PyQt5.Qt Пробовал PyQt6.Qt, такое вообще не находит

import sys
import math
import random
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.Qt6 import *


class QRegularPolygon(QGraphicsPolygonItem):
    def __init__(self, sides, radius, center, angle=None, parent=None):
        super().__init__()
        self.setFlag(QGraphicsItem.ItemIsMovable, True)

        self._sides = sides
        self._radius = radius
        if angle != None:
            self._angle = angle
        else:
            self._angle = 0.0
        self._center = center

        points = list()
        for s in range(self._sides):
            angle = self._angle + (2 * math.pi * s / self._sides)
            x = center.x() + (radius * math.cos(angle))
            y = center.y() + (radius * math.sin(angle))
            points.append(QPointF(x, y))

        self.setPolygon(QPolygonF(points))

        self.tx, self.ty = 200, 200

    def doRotate(self, alfa):
        tr = QTransform()
        tr.translate(self.tx, self.ty)
        tr.rotate(alfa)
        tr.translate(-self.tx, -self.ty)
        self.r, self.g, self.b = random.randint(0, 255), \
            random.randint(0, 255), \
            random.randint(0, 255)
        self.setBrush(QColor(self.r, self.g, self.b))
        self.setTransform(tr)


class GraphicsView(QGraphicsView):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        self.setStyleSheet('background: #AD8B73')

        self.scene = QGraphicsScene()
        self.setScene(self.scene)

        self.square = QGraphicsRectItem(0, 0, 400, 400)
        self.square.setPen(QPen(Qt.GlobalColor.cyan, 5, Qt.SolidLine))
        self.square.setBrush(QBrush((Qt.gray)))
        self.scene.addItem(self.square)

        radius = 200  # радиус описанной окружности
        ri = int(radius / 2 * math.sqrt(3))  # радиус вписанной окружности
        sides = 6  # сторон у hexagon
        angle = math.pi / 2
        xcenter = 200
        ycenter = 200
        center = QPointF(xcenter, ycenter)

        self.hexagon = QRegularPolygon(sides, ri, center, angle)
        self.hexagon.setPen(QPen(Qt.GlobalColor.red, 5, Qt.SolidLine))
        self.hexagon.setBrush(QBrush((Qt.darkBlue)))
        self.scene.addItem(self.hexagon)

        self.ellipse = QGraphicsEllipseItem(100, 100, 200, 200)
        self.ellipse.setPen(QPen(Qt.GlobalColor.magenta, 5, Qt.SolidLine))
        self.ellipse.setBrush(QBrush((Qt.yellow)))
        self.scene.addItem(self.ellipse)


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.view = GraphicsView()
        self.sld = QSlider(Qt.Horizontal, self)
        self.sld.setRange(-180, 180)
        self.sld.valueChanged.connect(self.changeValue)

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.view)
        vbox.addWidget(self.sld)

    def changeValue(self):
        self.view.hexagon.doRotate(self.sld.value())


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(600, 600)
    w.show()
    sys.exit(app.exec())

Ответы

▲ 0

В PyQt6 класс Qt был перемещен в PyQt6.QtCore.Qt и PyQt6.QtGui.Qt. Можно сказать был разделен на два где один взаемодействует с ядром а другой с интерфейсом и хранит инумератори.