ich versuche schon seit einiger Zeit ein rundes, um den Mittelpunkt rotierendes QGraphicsView zu erstellen. (Es soll dann als Overlay dienen) Das Problem ist: es "eiert" um den Mittelpunkt und ich bekomme es einfach nicht zentreiert und kann das Problem nicht erkennen.
Frage: Wie bekomme ich den Rotationsmittelpunkt in der Abbildung zentriert?
Hat hier jemand eine Idee?
Code: Alles auswählen
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class Overlay(QWidget):
def __init__(self,parent=None):
QWidget.__init__(self,parent)
self.height = parent.size().height()/2
self.width = parent.size().width()/2
self.setGeometry(80,20,self.height, self.height)
scene = QGraphicsScene(0,0,self.height,self.height)
scene.addItem(self.create_letter())
scene.addEllipse(0, 0, self.height ,self.height, QPen(Qt.NoPen), QBrush(QColor(0,129,94,40)))
self.view = QGraphicsView(self)
self.view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
self.view.setStyleSheet("background: rgba(100,100,100,50); border: transparent")
self.view.setScene(scene)
def create_letter(self):
n = self.height
group = QGraphicsItemGroup()
txt = QGraphicsTextItem("N")
txt.setFont(QFont("Arial", 20))
txt.translate(n/2-14, 30)
group.addToGroup(txt)
txt = QGraphicsTextItem("E")
txt.setFont(QFont("Arial", 20))
txt.translate(n-30, n/2 - 13)
txt.setRotation(90)
group.addToGroup(txt)
txt = QGraphicsTextItem("S")
txt.setFont(QFont("Arial", 20))
txt.translate(n/2+13, n - 30)
txt.setRotation(180)
group.addToGroup(txt)
txt = QGraphicsTextItem("W")
txt.setFont(QFont("Arial", 20))
txt.translate(30, n/2 + 16)
txt.setRotation(270)
group.addToGroup(txt)
return group
def rot_compass(self, angle=0):
self.view.rotate(80)
class Main(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(300,300,600,400)
self.overlay = Overlay(self)
self.t()
def paintEvent(self, event):
path = QPainterPath()
path.addRoundRect(0,0,500,380,25)
painter = QPainter(self)
pen = QPen(QColor(90,90,90))
pen.setWidth(2)
painter.setBrush(QColor(248,241,225))
painter.setPen(pen)
painter.drawPath(path)
def t(self):
print("Timer start")
self.timer = QTimer(self)
self.connect(self.timer, SIGNAL("timeout()"), self.overlay.rot_compass)
self.timer.start(1000)
app = QApplication(sys.argv)
m = Main()
m.show()
sys.exit(app.exec_())
Bob