Как сделать функцию поворота экрана в PyQt5?
Как сделать, что бы при запуске кода, начиналась функция поворота экрана? Мой код:
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.lbl = QtWidgets.QLabel()
self.pix = QtGui.QPixmap("iamge.png").scaled(400, 400) # ваше фото
self.lbl.setPixmap(self.pix)
self.btn = QPushButton()
self.btn.setText("Кнопка")
self.btn.setStyleSheet("""
background: pink;
color: black;
border-radius: 34px;
""")
self.btn.setFont(QtGui.QFont("Pusia-Bold.otf", 17, QtGui.QFont.Bold))
self.btn.setFixedSize(300, 150)
self.btn.setCheckable(True)
self.btn.clicked.connect(self.show_image)
layout = QGridLayout(self.centralWidget)
layout.addWidget(self.lbl, 0, 0, Qt.AlignCenter)
layout.addWidget(self.btn, 1, 0, Qt.AlignHCenter | Qt.AlignBottom)
self.eff = QGraphicsOpacityEffect()
self.eff.setOpacity(0.0)
self.lbl.setGraphicsEffect(self.eff)
self.animation = QPropertyAnimation(self.eff, b'opacity')
self.animation.setDuration(1000)
def show_image(self):
if not self.btn.isChecked():
self.animation.setStartValue(1)
self.animation.setEndValue(0)
else:
self.animation.setStartValue(0)
self.animation.setEndValue(1)
QtCore.QTimer.singleShot(2000, self.btn.click) # !!! 3000 + 4000 = 7000
self.animation.start()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ex = MainWindow()
ex.resize(420, 600)
ex.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
QTransform &QTransform::rotate(qreal angle, Qt::Axis axis = Qt::ZAxis)
Поворачивает систему координат против часовой стрелки на заданный угол вокруг указанной оси и возвращает ссылку на матрицу.
Обратите внимание, что если вы примените QTransform к точке, определенной в координатах виджета, направление вращения будет по часовой стрелке, потому что ось Y направлена вниз.
Угол указывается в градусах.
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.lbl = QtWidgets.QLabel()
self.lbl.setMinimumSize(500, 500) # +++
self.lbl.setAlignment(QtCore.Qt.AlignCenter) # +++
self.pix = QtGui.QPixmap("lena-2.png") #.scaled(400, 400) # ваше фото
self.lbl.setPixmap(self.pix)
self.btn = QPushButton()
self.btn.setText("Кнопка")
self.btn.setStyleSheet("""
background: pink;
color: black;
border-radius: 34px;
""")
self.btn.setFont(QtGui.QFont("Pusia-Bold.otf", 17, QtGui.QFont.Bold))
self.btn.setFixedSize(300, 150)
self.btn.setCheckable(True)
self.btn.clicked.connect(self.show_image)
layout = QGridLayout(self.centralWidget)
layout.addWidget(self.lbl, 0, 0, Qt.AlignCenter)
layout.addWidget(self.btn, 1, 0, Qt.AlignHCenter | Qt.AlignBottom)
self.eff = QGraphicsOpacityEffect()
self.eff.setOpacity(0.0)
self.lbl.setGraphicsEffect(self.eff)
self.animation = QPropertyAnimation(self.eff, b'opacity')
self.animation.setDuration(1000)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
QtCore.QTimer.singleShot(10, self.btn.click) # +++
self.rotation = 0
self.num = 0
self.timer = QtCore.QTimer()
self.timer.setInterval(100)
self.timer.timeout.connect(self.rotate_pixmap)
self.timer.start()
def rotate_pixmap(self):
self.num += 1
if self.num == 25:
self.timer.stop()
self.num = 0
return
pixmap = self.pix.copy()
self.rotation += 15
transform = QtGui.QTransform().rotate(self.rotation)
pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
self.lbl.setPixmap(pixmap)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def show_image(self):
if not self.btn.isChecked():
self.animation.setStartValue(1)
self.animation.setEndValue(0)
else:
self.animation.setStartValue(0)
self.animation.setEndValue(1)
QtCore.QTimer.singleShot(5000, self.btn.click)
self.animation.start()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ex = MainWindow()
ex.resize(520, 600) # +++
ex.show()
sys.exit(app.exec_())
