Найти - Пользователи
Полная версия: PyQt4: поворот и drag-and-drop картинок
Начало » GUI » PyQt4: поворот и drag-and-drop картинок
1 2 3 4 5 6 7
The gray Cardinal
Подскажите пожалуйста классы PyQt4, которые надо смотреть, чтобы реализовать следующее:
1. Отображение в окне программы картинок jpg или png, drag-and-drop этих картинок в пределах окна программы.
2. Поворот картинок на плоскости окна программы на указанный угол (трёхмерности не нужно). Интерактивного поворота (имеется в виду плавный поворот мышью способом drag-and-drop) не нужно, достаточно программно прорисовать картинку в нужный момент под нужным углом.
Cleric
я бы посоветовал посмотреть примеры идущие вместе с PyQt4

The gray Cardinal
1. Отображение в окне программы картинок jpg или png, drag-and-drop этих картинок в пределах окна программы.
examples\draganddrop\draggableicons\draggableicons.pyw
examples\draganddrop\puzzle\puzzle.pyw

The gray Cardinal
2. Поворот картинок на плоскости окна программы на указанный угол (трёхмерности не нужно). Интерактивного поворота (имеется в виду плавный поворот мышью способом drag-and-drop) не нужно, достаточно программно прорисовать картинку в нужный момент под нужным углом.
examples\painting\transformations.pyw
The gray Cardinal
Спасибо, но со вторым (examples\painting\transformations.pyw) не совсем понятно. Мне нужно загрузить картинки прямо из файлов jpg или png, и “крутить” уже их. Там вроде не совсем то?
gmorgunov
Привет.
Можно так сделать:
#!/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_())
Drag_and_Drop не поддерживается, как и заказывали :)
The gray Cardinal
gmorgunov
Спасибо, отличный пример!
gmorgunov
Никак не соображу, как вот это в питон приспособить: :/
 QGraphicsPixmapItem* pPixmapItem = scene.addPixmap(QPixmap("/home/mike/Desktop/lena.jpg"));
pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable);
Тогда в питоне будет drag_and_drop. В ++ он есть.
poltergeist
pix = scene.addPixmap(QtGui.QPixmap("/home/mike/Desktop/lena.jpg"))
pix.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
gmorgunov
poltergeist
pix = scene.addPixmap(QtGui.QPixmap("/home/mike/Desktop/lena.jpg"))
pix.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
Спасибо.Все заработало. Я так и думал, что вы или ice ответите. :)
The gray Cardinal
По аналогии с предыдущим примером пишу:
#!/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_())
Однако, картинка не прорисовывается (пустое белое поле), ошибок никаких. Файл boo.jpg находится рядом со скриптом. Что не так?
The gray Cardinal
Начинает работать, если строки
scene = QtGui.QGraphicsScene()
scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(scene)
заменить на строки
self.scene = QtGui.QGraphicsScene()
self.scene.addPixmap(pixmap)
view = QtGui.QGraphicsView(self.scene)
Может кто объяснить, почему?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB