Найти - Пользователи
Полная версия: PyQt4: поворот и drag-and-drop картинок
Начало » GUI » PyQt4: поворот и drag-and-drop картинок
1 2 3 4 5 6 7
The gray Cardinal
igor.kaist
Все понял. То есть область, в которой находится повернутая картинка, все равно остается прямоугольной и при drag'е цепляется не та картинка…
А ты у себя в Tkinter повёрнутые картинки никогда не драг-энд-дропил? Т.е. надобности решать такую проблему не было в принципе?
Может попробывать “вручную” определять, за какую картинку цепляемся мышкой? То есть зная угол и положении картинок, по положению курсора определять, какая картинка попала под курсор мышки?
Это не спортивно :) (или попахивает изобретением лисапеда). Зачем мне вся эта неимоверная монстрятина, если я с помощью неё ничего не могу, и надо всё ручками писать? Кроме того, я не верю (© Станиславский :lol:), что эта проблема не решается “цивилизованными” способами.
The gray Cardinal
gmorgunov
у картинки при многократном нажатии появляется зернистость
В принципе, это обходится - можно просто при повороте в коде кое-что делать заново, и всё (с налёту пример не приведу, но у меня получалось, вроде).
gmorgunov
единственный стоящий пример из всех - puzzles.py
Да, пазл хорошо смотрится, но он не совсем для моей задачи.
gmorgunov
Да,похоже, что использование PyQt для простых операций - не лучший выбор.
Погоди. Это не факт :).
poltergeist
читайте доки http://doc.trolltech.com/4.4/graphicsview.html, ну не давать же готовый пример:) Это вообще для чего делается? Для русского cookbook-а?

З.Ы. В Qt можно всё сделать, надо только хотеть узнать как…
gmorgunov
poltergeist
читайте доки http://doc.trolltech.com/4.4/graphicsview.html, ну не давать же готовый пример:) Это вообще для чего делается? Для русского cookbook-а?

З.Ы. В Qt можно всё сделать, надо только хотеть узнать как…
Лучшее доказательство - пример. Тогда будем дружно аплодировать. Эту ссылку смотрел не единожды.

Итак простая задача ( она безусловно решаема ):
На РyQt4 ( моджно на Qt4 - мы поймем :) ) реализовать след. виджет:
Окно, разделененное на 2 части. В одной части просто отображать 2 картинки.В ней должен быть реализован
drag_and-drop.
В другой части эту картинку надо поворачивать, уменьшать/увеличивать. Между двумя частями дожен быть
реализован drag_and_drop для каждой из картинок.

Я не просто жду. Я сам пытаюсь реализовать этот виджет. Если сделаете, буду премного благодарен. :)
The gray Cardinal
poltergeist
ну не давать же готовый пример :)
Почему нет, если такой пример есть или его очень быстро написать?
Задача такая: прорисовать несколько картинок из файлов, часть которых повёрнута и накладывается друг на друга, и обеспечить их нормальный drag-and-drop.
poltergeist
Это вообще для чего делается? Для русского cookbook-а?
Для изучения в первую очередь. С прицелом написать небольшое приложение-игрушку. Для “русского cookbook-а” - само собой, тоже.
The gray Cardinal
poltergeist
Меня сбивает с толку то, что rotate() применяется для QGraphicsView в целом, а это вроде как принципиально мне не подходит. Если ты уже знаешь, как решить проблему, можешь подсказать и словесно, без примера (какие виджеты в какие надо упаковать, и какие методы использовать для поворотов и drag-and-drop).
gmorgunov
The Gray Cardinal
По сути мы сказали одно и то же. Итак ждем от poltergeist-а рабочий пример на Qt4/PyQt4.

P.S.
Обычно пишут: читайте google, doc.trolltech.com, Карла Маркса - когда сказать нечего. :/
poltergeist
Для всего что вам нужно, есть QGraphicsView, больше ничего вроде не требуется.

1) img = QGraphicsPixmapItem(pix) - ваши изображения в сцене
img.rotate(angle) - поворот
img.resetTransform() - обнуление матрицы трансформации, может пригодится
2) чтобы видеть это без ущерба качества, нужно поставить соответствующие флаги:
view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) (+ есть ещё и HighQualityAntialiasing)
3) драг-н-дроп такой же как и во всём фреймворке: http://doc.trolltech.com/4.4/graphicsview.html#drag-and-drop

З.Ы. Писать пример не хочется, а доку вы так и не прочитали:( Выкладывайте что у вас получится, посмотрим…
The gray Cardinal
До drag-and-drop пока не дошёл. Но вот так можно вроде повернуть картинки:
#!/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)

self.scene = QtGui.QGraphicsScene()

pixmap = QtGui.QPixmap(u'011.jpg')
self.scene.addPixmap(pixmap.transformed(QtGui.QMatrix().rotate(-25)))

pixmap2 = QtGui.QPixmap(u'012.jpg')
item2 = self.scene.addPixmap(pixmap2.transformed(QtGui.QMatrix().rotate(0.01)))
item2.setOffset(100, 30)

pixmap3 = QtGui.QPixmap(u'113.jpg')
item3 = self.scene.addPixmap(pixmap3.transformed(QtGui.QMatrix().rotate(25)))
item3.setOffset(120, 40)

view = QtGui.QGraphicsView(self.scene, self)
view.setGeometry(0, 0, 450, 320)
view.setRenderHints(QtGui.QPainter.SmoothPixmapTransform | QtGui.QPainter.HighQualityAntialiasing)

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
Вот как это выглядит:

Однако, SmoothPixmapTransform и HighQualityAntialiasing не помогают, изображения ощутимо портятся. Если эту порчу нельзя победить, дальше двигаться смысла нет.
The gray Cardinal
gmorgunov
Итак ждем от poltergeist-а рабочий пример на Qt4/PyQt4.
Обычно пишут: читайте google, doc.trolltech.com, Карла Маркса - когда сказать нечего.
Ну ты прям к стенке poltergeist'а прижимаешь :lol:.
Не надо так, а то он ещё обидится, что мы тогда делать будем? :lol:
(шутка)
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