Форум сайта python.su
Попробую немного уточнить свои намерения. Мне нужен не просто поворот картинки (как уже описано в самом первом посте), а ещё и частичное наложение картинок друг на друга. При этом “поле” картинки (в данном случае объект QGraphicsView) должно быть также повёрнуто, чтобы при повороте прямоугольной картинки это поле не было вынуждено “разрастаться” в ширину, что происходит, если оно остаётся ориентированным по-прежнему вертикально. Попросту говоря, мне нужно отрисовать игральные карты “веером” :). Чтобы пояснить свою мысль, привожу маленький скрипт (пригоден для запуска):
#!/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'011.jpg')
self.scene = QtGui.QGraphicsScene()
self.scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(self.scene, self)
view.rotate(-20)
pixmap2 = QtGui.QPixmap(u'012.jpg')
self.scene2 = QtGui.QGraphicsScene()
self.scene2.addPixmap(pixmap2)
view2 = QtGui.QGraphicsView(self.scene2, self)
pixmap3 = QtGui.QPixmap(u'013.jpg')
self.scene3 = QtGui.QGraphicsScene()
self.scene3.addPixmap(pixmap3)
view3 = QtGui.QGraphicsView(self.scene3, self)
view3.rotate(20)
view.setGeometry(0, 0, 250, 300)
view2.setGeometry(100, 00, 163, 320)
view3.setGeometry(170, 20, 250, 300)
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
Офлайн
Привет.
Похоже, надо использовать paintEvent(). Я с этим сталкивался. Проверить не могу( авария с инетом).
Нашел похожий пример( использование paintEvent() ). Восстановлюсь - отпишу. :)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyWidget(QWidget):
def __init__(self,*args):
QWidget. __init__ (self,*args)
def paintEvent(self, event=None):
painter = QPainter(self)
image = QImage("/home/mike/Desktop/lena.jpg")
painter.drawImage(0,0, image)
app = QApplication(sys.argv)
widget = MyWidget()
widget.resize(500,500)
widget.show()
sys.exit(app.exec_())
Офлайн
Ещё, был бы признателен за простейший пример с drag-and-drop картинок в пределах окна программы.
Ну, например, сделать в окне два “посадочных места”, между которыми перетаскивать мышкой одну картинку.
Добавлено позже:
Эта просьба снимается, т.к. пример examples\draganddrop\draggableicons\draggableicons.pyw действительно вполне доступен (извиняюсь, я как-то сразу не проникся).
Отредактировано (Дек. 1, 2008 14:34:18)
Офлайн
Отыскал способ, как поворачивать картинки с помощью Qlabel и QPixmap/QMatrix. Примерно так:
pic = QtGui.QPixmap('012.jpg')
pic = pic.transformed(QtGui.QMatrix().rotate(20))
icon2 = QtGui.QLabel(self)
icon2.setPixmap(pic)
…а какие вообще технологии мне нужны? Подходят ли мне для этой задачи все эти QPixmap, QGraphicsScene и QGraphicsView? Закрадывается мысль, что не подходят. Может, нужно смотреть в сторону OpenGL?пока всё ещё актуален.
Отредактировано (Дек. 2, 2008 12:02:16)
Офлайн
У меня с этим PIL замечательно справляется :)
Офлайн
igor.kaistА есть ссылочка с демонстрацией результата?
У меня с этим PIL замечательно справляется
Офлайн
Поворот изображений то? А что демонстрировать то?
out = im.rotate(45) # degrees counter-clockwise
The gray CardinalЗачем OpenGL юзать для простой операции, как поворот картинок? Или я чего то недопонимаю…
Кроме того, при многократном вызове “rotate” картинка сильно портится (снижается качество изображения). Таким образом, вопрос:
…а какие вообще технологии мне нужны? Подходят ли мне для этой задачи все эти QPixmap, QGraphicsScene и QGraphicsView? Закрадывается мысль, что не подходят. Может, нужно смотреть в сторону OpenGL?
Офлайн
igor.kaistDrag-and-drop повёрнутых изображений, проблема именно в этом. Коряво это получается, и я не пойму, почему: то ли я не доделал что-то, то ли действительно это нормально этими инструментами реализовать нельзя. Если у тебя нормальный инет, глянь видео выше (в #14 посте), может, так понятнее будет, в чём моя проблема.
А что демонстрировать то?
Офлайн
Все понял. То есть область, в которой находится повернутая картинка, все равно остается прямоугольной и при drag'е цепляется не та картинка…
Может попробывать “вручную” определять, за какую картинку цепляемся мышкой? То есть зная угол и положении картинок, по положению курсора определять, какая картинка попала под курсор мышки?
Офлайн
igor.kaistДа,похоже, что использование PyQt для простых операций - не лучший выбор.Слишком все завязано.Но пока сам во всем не убедишься - не поверишь. Работы - на рубль, результат на копейку.Конечно, я еще буду пробовать PyQt, но уже зародились серьезные сомнения в целесообразности ее использования для простых задач.
Зачем OpenGL юзать для простой операции, как поворот картинок? Или я чего то недопонимаю…
Офлайн