Python PyQt5 QGraphicsPixPitem旋转中心
我正在尝试使用PyQt5和Qt设计器制作一个简单的速度表。由于车速表箭头的旋转,我有一个问题。Python PyQt5 QGraphicsPixPitem旋转中心,python,rotation,pyqt5,qgraphicspixmapitem,Python,Rotation,Pyqt5,Qgraphicspixmapitem,我正在尝试使用PyQt5和Qt设计器制作一个简单的速度表。由于车速表箭头的旋转,我有一个问题。self.arrow。 代码如下: classmywin(qtwidts.QMainWindow): def uuu init uuu(self,parent=None): qtwidts.QWidget.\uuuuu init\uuuuuuu(self,parent) self.ui=ui\u主窗口() self.ui.setupUi(self) self.ui.speedSlider.valueCh
self.arrow
。
代码如下:
classmywin(qtwidts.QMainWindow):
def uuu init uuu(self,parent=None):
qtwidts.QWidget.\uuuuu init\uuuuuuu(self,parent)
self.ui=ui\u主窗口()
self.ui.setupUi(self)
self.ui.speedSlider.valueChanged.connect(self.valuechange)
场景=qgraphicscene()
scene.setscen直立(0,0,self.width(),self.height())
self.pixmap=QPixmap(:/img/img/speed\u arrow.png)
self.arrow=scene.addPixmap(self.pixmap)
graphicsView=QGraphicsView(场景,self.ui.centralwidget)
graphicsView.setStyleSheet(“背景图像:url(:/img/img/central1.png);\n”
“背景重复:无重复;\n”
“背景位置:中间;\n”
“\n”
“边框:无;”)
self.ui.gridLayout.addWidget(graphicsView)
def值更改(自身):
angel=self.ui.speedSlider.value()
xform=QTransform()
变换。旋转(角度)
xformed_pixmap=self.pixmap.transformed(xform,Qt.SmoothTransformation)
self.arrow.setPixmap(xformed_pixmap)
#打印(self.arrow.sceneboundingdirect())
我没有在代码中绘制速度表箭头,而是加载了一个
我还添加了一个滑块self.ui.speedSlider
,可以用来确定旋转角度
当我移动滑块时,实际上实现了箭头的旋转。问题是箭头不绕其中心旋转
如何固定旋转中心,使其始终位于箭头的中心self.arrow
这是Ui_主窗口代码:
class Ui\u主窗口(对象):
def设置UI(自我,主窗口):
MainWindow.setObjectName(“MainWindow”)
主窗口。调整大小(800600)
MainWindow.setStyleSheet(“背景图像:url(:/img/img/bgd.png);\n”
“位置:中间;”)
self.centralwidget=qtwidts.QWidget(主窗口)
self.centralwidget.setObjectName(“centralwidget”)
self.gridLayout=qtwidts.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName(“gridLayout”)
self.speedSlider=qtwidts.QSlider(self.centralwidget)
self.speedSlider.setMaximum(99)
self.speedSlider.setOrientation(QtCore.Qt.Horizontal)
self.speedSlider.setObjectName(“speedSlider”)
self.gridLayout.addWidget(self.speedSlider,1,0,1,1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar=qtwidts.QMenuBar(主窗口)
self.menubar.setGeometry(QtCore.QRect(0,0800,21))
self.menubar.setObjectName(“menubar”)
MainWindow.setMenuBar(self.menubar)
self.statusbar=qtwidts.QStatusBar(主窗口)
self.statusbar.setObjectName(“statusbar”)
main window.setStatusBar(self.statusbar)
自重传(主窗口)
QtCore.QMetaObject.connectSlotsByName(主窗口)
def重新传输(自身,主窗口):
_translate=QtCore.QCoreApplication.translate
setWindowTitle(_translate(“MainWindow”、“MainWindow”))
箭
中央1
无论值何时更改,都不要变换pixmap。转换pixmap发生在本地pixmap坐标系中,只会使事情复杂化 相反,将旋转设置为
self.arrow
self.arrow.setTransformOriginPoint()
将旋转原点设置为针座的中心(因此几乎等于像素贴图的宽度,其高度的一半)。创建箭头后直接执行此操作有关QGraphics站点转换的更多信息,请参见。共享Ui\u主窗口和central1.png,speed\u箭头。png@eyllanesc我刚刚添加了Ui_主窗口代码、central1.png和speed_arrow。png@Marko与问题本身无关,但请注意主窗口样式表中有一个输入错误:有一个额外的“s”在
位置:居中
@musicamante感谢您的关注。根据更新的问题,原点可以使用self.arrow.boundingRect().center()
或self.pixmap.rect().center()
@ypnos直接放置。在我的例子中,我也使用了一半的宽度,因为我在图片的右侧有一个空白。如果没有空的空间,我几乎会使用整个宽度(有一个小的偏移)。非常感谢你。