Можно ли реализовать авиагоризонт в 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



