Форум сайта python.su
igor.kaistА ты у себя в Tkinter повёрнутые картинки никогда не драг-энд-дропил? Т.е. надобности решать такую проблему не было в принципе?
Все понял. То есть область, в которой находится повернутая картинка, все равно остается прямоугольной и при drag'е цепляется не та картинка…
Может попробывать “вручную” определять, за какую картинку цепляемся мышкой? То есть зная угол и положении картинок, по положению курсора определять, какая картинка попала под курсор мышки?Это не спортивно :) (или попахивает изобретением лисапеда). Зачем мне вся эта неимоверная монстрятина, если я с помощью неё ничего не могу, и надо всё ручками писать? Кроме того, я не верю (© Станиславский :lol:), что эта проблема не решается “цивилизованными” способами.
Отредактировано (Дек. 3, 2008 16:51:35)
Офлайн
gmorgunovВ принципе, это обходится - можно просто при повороте в коде кое-что делать заново, и всё (с налёту пример не приведу, но у меня получалось, вроде).
у картинки при многократном нажатии появляется зернистость
gmorgunovДа, пазл хорошо смотрится, но он не совсем для моей задачи.
единственный стоящий пример из всех - puzzles.py
gmorgunovПогоди. Это не факт :).
Да,похоже, что использование PyQt для простых операций - не лучший выбор.
Отредактировано (Дек. 3, 2008 16:56:15)
Офлайн
читайте доки http://doc.trolltech.com/4.4/graphicsview.html, ну не давать же готовый пример:) Это вообще для чего делается? Для русского cookbook-а?
З.Ы. В Qt можно всё сделать, надо только хотеть узнать как…
Офлайн
poltergeistЛучшее доказательство - пример. Тогда будем дружно аплодировать. Эту ссылку смотрел не единожды.
читайте доки http://doc.trolltech.com/4.4/graphicsview.html, ну не давать же готовый пример:) Это вообще для чего делается? Для русского cookbook-а?
З.Ы. В Qt можно всё сделать, надо только хотеть узнать как…
Офлайн
poltergeistПочему нет, если такой пример есть или его очень быстро написать?
ну не давать же готовый пример :)
poltergeistДля изучения в первую очередь. С прицелом написать небольшое приложение-игрушку. Для “русского cookbook-а” - само собой, тоже.
Это вообще для чего делается? Для русского cookbook-а?
Офлайн
poltergeist
Меня сбивает с толку то, что rotate() применяется для QGraphicsView в целом, а это вроде как принципиально мне не подходит. Если ты уже знаешь, как решить проблему, можешь подсказать и словесно, без примера (какие виджеты в какие надо упаковать, и какие методы использовать для поворотов и drag-and-drop).
Офлайн
The Gray Cardinal
По сути мы сказали одно и то же. Итак ждем от poltergeist-а рабочий пример на Qt4/PyQt4.
P.S.
Обычно пишут: читайте google, doc.trolltech.com, Карла Маркса - когда сказать нечего. :/
Офлайн
Для всего что вам нужно, есть 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
З.Ы. Писать пример не хочется, а доку вы так и не прочитали:( Выкладывайте что у вас получится, посмотрим…
Офлайн
До 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_())
Офлайн
gmorgunovНу ты прям к стенке poltergeist'а прижимаешь :lol:.
Итак ждем от poltergeist-а рабочий пример на Qt4/PyQt4.
Обычно пишут: читайте google, doc.trolltech.com, Карла Маркса - когда сказать нечего.
Офлайн