0

PyQt5 と Qt Designer を使用して簡単な速度計を作成しようとしています。スピードメーターの矢印の回転に問題がありself.arrowます。
これはコードです:

class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.speedSlider.valueChanged.connect(self.valuechange)

        scene = QGraphicsScene()
        scene.setSceneRect(0, 0, self.width(), self.height())
        self.pixmap = QPixmap(":/img/img/speed_arrow.png")
        self.arrow = scene.addPixmap(self.pixmap)

        graphicsView = QGraphicsView(scene, self.ui.centralwidget)
        graphicsView.setStyleSheet( "background-image:url(:/img/img/central1.png);\n"
                                    "background-repeat:no-repeat;\n"
                                    "background-position: center;\n"
                                    "\n"
                                    "border:none;")
        self.ui.gridLayout.addWidget(graphicsView)

    def valuechange(self):
        angel = self.ui.speedSlider.value()
        xform = QTransform()
        xform.rotate(angel)
        xformed_pixmap = self.pixmap.transformed(xform, Qt.SmoothTransformation)
        self.arrow.setPixmap(xformed_pixmap)

        #print(self.arrow.sceneBoundingRect())

コード自体に速度計の矢印を描画する代わりに、 写真.

self.ui.speedSliderまた、回転角度を決定するスライダーも追加しました。

スライダーを動かすと、実際に矢印が回転します。問題は、矢印が中心を中心に回転しないことです。

例

回転の中心を常に矢印の中心に固定するにはどうすればよいself.arrowですか?

これは Ui_MainWindow コードです:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("background-image:url(:/img/img/bgd.png);\n"
"possition:center;")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.speedSlider = QtWidgets.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 = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

矢印

セントラル1

4

1 に答える 1