Можно ли реализовать авиагоризонт в PyQt5?

Краткое объяснение: авиагоризонтом называют прибор отображения тангажа и крена летательного средства.
При изменение положение тангажа у летательного аппарата черта находящаяся по центру изменяет направление вверх или вниз.

Выглядит он следующим образом:

введите сюда описание изображения

Как можно реализовать его добавления и работу через Qt Deisgner с помощью PyQt5.


Ответы (2 шт):

Автор решения: Sergey Tatarincev

можно. логику "кручения" сами прилепите. картинка fg (foreground) - то что будет крутиться. у нее должен быть прозрачный фон

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_Form(QtWidgets.QWidget):    
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)
    def work(self):
        transform = QtGui.QTransform()        
        self.angle += 5
        transform.rotate(self.angle)
        self.fg = QtGui.QPixmap("fg.png")        
        newpix = self.fg.transformed(transform)
        self.fgLabel.setPixmap(newpix)

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 400)
        self.angle=0;
        self.bg = QtGui.QPixmap("bg.png")        
        self.bgLabel = QtWidgets.QLabel(Form)
        self.bgLabel.setPixmap(self.bg)
        self.bgLabel.resize(400, 400)
        self.bgLabel.move(0,0);

        self.fgLabel = QtWidgets.QLabel(Form)
        self.fg = QtGui.QPixmap("fg.png")        
        self.fgLabel = QtWidgets.QLabel(Form)
        self.fgLabel.resize(400, 400)
        self.fgLabel.move(0,0)
        self.fgLabel.setPixmap(self.fg)
          
        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.work)
        self.timer.start()        


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = Ui_Form()
    ex.show()
    sys.exit(app.exec_())
→ Ссылка
Автор решения: S. Nick

Я не знаю, правильно ли вас понял, да и изображения не очень хорошо раскрасил.

Но попробуйте подвигать QSlider.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralwidget = QtWidgets.QWidget(objectName='centralwidget')
        self.setCentralWidget(self.centralwidget)
        
        self.subWidget = QtWidgets.QWidget(objectName='subWidget')        
        self.subWidget.setFixedSize(500, 500)

        self.label = QLabel(self.subWidget)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.pixmap = QPixmap("image/avi2-11.png")
        self.label.setPixmap(self.pixmap)
        
        self.sld = QSlider(Qt.Horizontal, self)
        self.sld.setValue(0)
        self.sld.setPageStep(1)                     
        self.sld.setTickInterval(5)                      
        self.sld.setRange(-360, 360)        
        self.sld.setFocusPolicy(Qt.StrongFocus)
        self.sld.setTickPosition(QSlider.TicksBothSides) 
        self.sld.setSingleStep(1)        
        self.sld.valueChanged[int].connect(self.trans_form)

        vbox = QtWidgets.QVBoxLayout(self.centralwidget)
        vbox.addWidget(self.sld)
        vbox.addWidget(self.subWidget)
        
    def trans_form(self, value):
        pixmap = self.pixmap.copy() 
        self.rotation = value
        transform = QtGui.QTransform().rotate(self.rotation)
        pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
        self.label.setPixmap(pixmap)
       

qss = '''
#centralwidget {
    background: #3DB2FF;
}
#subWidget {
    background-image: url(image/avi1-11.png) 0 0 0 0  ;
    background-repeat: no-repeat; 
    background-position: center;
}
'''        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(qss)
    window = MainWindow()
    window.show()
    app.exec_()

введите сюда описание изображения

avi1-11.png

введите сюда описание изображения

avi2-11.png

введите сюда описание изображения

→ Ссылка