Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2017 15:23:13

Arcaon
Зарегистрирован: 2017-04-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с пиксельной графикой

Доброго времени суток уважаемые пайтонисты.
Задача такова: открыть изображение и мышкой нарисовать на нем прямоугольник c возможностью удаления, манипуляции с координатами для вывода/ввода в XML/JSON.
Tkinter умеет работать только с изображениями в формате GIF.
PIL не умеет рисовать мышью и в нем нет нужных виджетов (button, label ect.)
PyGame все таки больше ориентирован на разработку игр и динамической графики, а меня интересуют исключительно геометрические примитивы.
Безусловно есть вероятность что я заблуждаюсь в выше написанном но в сети солюшен я не обнаружил.
Заранее благодарен.

Офлайн

#2 Апрель 28, 2017 15:50:25

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Работа с пиксельной графикой

PyQt.QPainter + mouseEvent
https://pythonworld.ru/gui/pyqt5-painting.html
есть easypaint на Qt, исходники доступны
https://github.com/Gr1N/EasyPaint
можете портировать на питон

 from PyQt4.QtGui import *
from PyQt4.QtCore import *
class W(QWidget):
    def __init__(self,parent=None):
        QWidget.__init__(self,parent)
        self.posStart = QPoint()
        self.posEnd = QPoint()
        self.resize(400,300)
        self.pix = QPixmap(self.size())
        self.pix.fill(QColor(0,0,0,0))
    def mousePressEvent(self,e):
        self.posStart = e.pos()
        self.setCursor(Qt.CrossCursor)
    def mouseReleaseEvent(self,e):
        self.posEnd = e.pos()
        self.setCursor(Qt.ArrowCursor)
        x = self.posStart.x()
        y = self.posStart.y()
        w = self.posEnd.x() - self.posStart.x()
        h = self.posEnd.y() - self.posStart.y()
        p = QPainter()
        p.begin(self.pix)
        pen = QPen()
        pen.setBrush(QColor(Qt.red))
        pen.setWidth(2)
        p.setPen(pen)
        p.drawRect(x,y,w,h)
        p.end()
        self.update()
    def paintEvent(self,e):
        p = QPainter()
        p.begin(self)
        p.drawPixmap(0,0,self.pix)
        p.end()
if __name__=="__main__":
    app = QApplication([])
    w = W()
    w.move(0,0)
    w.show()
    app.exec_()

Отредактировано vic57 (Апрель 28, 2017 16:37:26)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version