Форум сайта python.su
Подскажите пожалуйста классы PyQt4, которые надо смотреть, чтобы реализовать следующее:
1. Отображение в окне программы картинок jpg или png, drag-and-drop этих картинок в пределах окна программы.
2. Поворот картинок на плоскости окна программы на указанный угол (трёхмерности не нужно). Интерактивного поворота (имеется в виду плавный поворот мышью способом drag-and-drop) не нужно, достаточно программно прорисовать картинку в нужный момент под нужным углом.
Офлайн
я бы посоветовал посмотреть примеры идущие вместе с PyQt4
The gray Cardinalexamples\draganddrop\draggableicons\draggableicons.pyw
1. Отображение в окне программы картинок jpg или png, drag-and-drop этих картинок в пределах окна программы.
The gray Cardinalexamples\painting\transformations.pyw
2. Поворот картинок на плоскости окна программы на указанный угол (трёхмерности не нужно). Интерактивного поворота (имеется в виду плавный поворот мышью способом drag-and-drop) не нужно, достаточно программно прорисовать картинку в нужный момент под нужным углом.
Офлайн
Спасибо, но со вторым (examples\painting\transformations.pyw) не совсем понятно. Мне нужно загрузить картинки прямо из файлов jpg или png, и “крутить” уже их. Там вроде не совсем то?
Офлайн
Привет.
Можно так сделать:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
class MyView(QtGui.QGraphicsView):
def __init__(self,*args):
QtGui.QGraphicsView.__init__(self,*args)
# поворот против часовой стрелки на 10 градусов
def slotRotateLeft (self):
self.rotate(-10)
# поворот по часовой стрелке на 10 градусов
def slotRotateRight(self):
self.rotate(10)
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(500,500)
scene = QtGui.QGraphicsScene()
scene.addPixmap(QtGui.QPixmap("/home/mike/Desktop/lena.jpg"))
view = MyView(scene)
buttonLeft = QtGui.QPushButton("Left")
buttonRight = QtGui.QPushButton("Right")
# связываем нажатие кнопки с поворотом против/по часовой стрелке
QtCore.QObject.connect(buttonLeft ,QtCore.SIGNAL("clicked()"),view.slotRotateLeft )
QtCore.QObject.connect(buttonRight,QtCore.SIGNAL("clicked()"),view.slotRotateRight)
# размещаем виджеты
layout=QtGui.QVBoxLayout()
layout.addWidget(view)
layout.addWidget(buttonLeft)
layout.addWidget(buttonRight)
widget.setLayout(layout)
widget.show()
sys.exit(app.exec_())
Офлайн
gmorgunov
Спасибо, отличный пример!
Офлайн
Никак не соображу, как вот это в питон приспособить: :/
QGraphicsPixmapItem* pPixmapItem = scene.addPixmap(QPixmap("/home/mike/Desktop/lena.jpg"));
pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable);
Офлайн
pix = scene.addPixmap(QtGui.QPixmap("/home/mike/Desktop/lena.jpg"))
pix.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
Офлайн
poltergeistСпасибо.Все заработало. Я так и думал, что вы или ice ответите. :)pix = scene.addPixmap(QtGui.QPixmap("/home/mike/Desktop/lena.jpg"))
pix.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
Офлайн
По аналогии с предыдущим примером пишу:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
pixmap = QtGui.QPixmap(u'boo.jpg')
scene = QtGui.QGraphicsScene()
scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(scene)
boxlay = QtGui.QHBoxLayout(self)
boxlay.addWidget(view)
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
Отредактировано (Ноя. 30, 2008 17:02:35)
Офлайн
Начинает работать, если строки
scene = QtGui.QGraphicsScene()
scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(scene)
self.scene = QtGui.QGraphicsScene()
self.scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(self.scene)
Офлайн