Найти - Пользователи
Полная версия: Работа с пиксельной графикой
Начало » Python для новичков » Работа с пиксельной графикой
1
Arcaon
Доброго времени суток уважаемые пайтонисты.
Задача такова: открыть изображение и мышкой нарисовать на нем прямоугольник c возможностью удаления, манипуляции с координатами для вывода/ввода в XML/JSON.
Tkinter умеет работать только с изображениями в формате GIF.
PIL не умеет рисовать мышью и в нем нет нужных виджетов (button, label ect.)
PyGame все таки больше ориентирован на разработку игр и динамической графики, а меня интересуют исключительно геометрические примитивы.
Безусловно есть вероятность что я заблуждаюсь в выше написанном но в сети солюшен я не обнаружил.
Заранее благодарен.
vic57
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_()
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