изменение размера, перемещение и поворот QWidget во время работы программы
У меня есть QWidget и мне нужно изменять его размер, перемещать и поворачивать по форме (как в Фотошоп или QtDesigner).
Это всё должно быть во время работы приложения.
Помогите пожалуйста и нет я не Фотошоп делаю.
Вот мой код перемещения, но вот изменение размера и поворот я не где в Google не нашёл: '''
def mousePressEvent(self, event):
self.__mousePressPos = None
self.__mouseMovePos = None
if event.button() == Qt.LeftButton:
self.__mousePressPos = event.globalPos()
self.__mouseMovePos = event.globalPos()
super(DragButton, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
# adjust offset from clicked point to origin of widget
currPos = self.mapToGlobal(self.pos())
globalPos = event.globalPos()
diff = globalPos - self.__mouseMovePos
newPos = self.mapFromGlobal(currPos + diff)
self.move(newPos)
self.__mouseMovePos = globalPos
super(DragButton, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if self.__mousePressPos is not None:
moved = event.globalPos() - self.__mousePressPos
if moved.manhattanLength() > 3:
event.ignore()
return
super(DragButton, self).mouseReleaseEvent(event)
'''
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Вот небольшой пример использования QGraphicsProxyWidget, может быть это ваш случай
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGraphicsScene, QGraphicsView
if __name__=='__main__':
app = QApplication(sys.argv)
scene = QGraphicsScene()
view = QGraphicsView(scene)
view.setGeometry(100, 100, 400, 200)
view.show()
widget = QWidget() # << Ваш виджет
proxy = scene.addWidget(widget)
// Модифицируем виджет, используя его прокси
// Масштаб
proxy.setScale(2.0)
// Вращение
proxy.setRotation(30)
sys.exit(app.exec_())
В документации есть такое предупреждение:
Using an OpenGL viewport limits the ability to use QGraphicsProxyWidget . Not all combinations of widgets and styles can be supported with such a setup. You should carefully test your UI and make the necessary adjustments.