Как код, написанный на PyQt5, сделать под PyQt6?
Не работает 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())
Источник: Stack Overflow на русском