Помогите пожалуйста! Делаю рисовалку, уже сделал кисти, но не могу сделать инструмент фигуры, падает когда хочу нарисовать прямоугольник. Помогите пожалуйста!
:
from PyQt5.QtWidgets import QMainWindow, QApplication, QMenu, QMenuBar, QAction, QFileDialog
from PyQt5.QtGui import QIcon, QImage, QPainter, QPen, QBrush
from PyQt5.QtCore import Qt, QPoint
from PyQt5 import QtGui
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
title = "Paint Application"
self.pos1 = [0, 0]
self.pos2 = [0, 0]
self.k = ()
self.pryamougs = []
self.sost = False
top = 400
left = 400
width = 800
height = 600
self.setWindowTitle(title)
self.setGeometry(top, left, width, height)
self.image = QImage(self.size(), QImage.Format_RGB32)
self.image.fill(Qt.white)
self.drawing = False
self.brushSize = 2
self.brushColor = Qt.black
self.lastPoint = QPoint()
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu("Файл")
brushSize = mainMenu.addMenu("Размер кисти")
brushColor = mainMenu.addMenu("Цвет кисти")
figur = mainMenu.addMenu("Фигуры")
r = QAction("Прямоугольник", self)
figur.addAction(r)
r.triggered.connect(self.rct)
saveAction = QAction("Сохранить", self)
saveAction.setShortcut("Ctrl+S")
fileMenu.addAction(saveAction)
saveAction.triggered.connect(self.save)
clearAction = QAction("Очистить", self)
clearAction.setShortcut("Ctrl+C")
fileMenu.addAction(clearAction)
clearAction.triggered.connect(self.clear)
threepxAction = QAction("3px", self)
brushSize.addAction(threepxAction)
threepxAction.triggered.connect(self.threePixel)
fivepxAction = QAction("5px", self)
brushSize.addAction(fivepxAction)
fivepxAction.triggered.connect(self.fivePixel)
sevenpxAction = QAction("7px", self)
brushSize.addAction(sevenpxAction)
sevenpxAction.triggered.connect(self.sevenPixel)
ninepxAction = QAction("9px", self)
brushSize.addAction(ninepxAction)
ninepxAction.triggered.connect(self.ninePixel)
one_one_pxAction = QAction("11px", self)
brushSize.addAction(one_one_pxAction)
one_one_pxAction.triggered.connect(self.one_one_Pixel)
one_three_pxAction = QAction("13px", self)
brushSize.addAction(one_three_pxAction)
one_three_pxAction.triggered.connect(self.one_three_Pixel)
one_five_pxAction = QAction("15px", self)
brushSize.addAction(one_five_pxAction)
one_five_pxAction.triggered.connect(self.one_five_Pixel)
one_seven_pxAction = QAction("17px", self)
brushSize.addAction(one_seven_pxAction)
one_seven_pxAction.triggered.connect(self.one_seven_Pixel)
blackAction = QAction("Чёрный", self)
blackAction.setShortcut("Ctrl+B")
brushColor.addAction(blackAction)
blackAction.triggered.connect(self.blackColor)
whitekAction = QAction("Белый", self)
whitekAction.setShortcut("Ctrl+W")
brushColor.addAction(whitekAction)
whitekAction.triggered.connect(self.whiteColor)
redAction = QAction("Красный", self)
redAction.setShortcut("Ctrl+R")
brushColor.addAction(redAction)
redAction.triggered.connect(self.redColor)
greenAction = QAction("Зелёный", self)
greenAction.setShortcut("Ctrl+G")
brushColor.addAction(greenAction)
greenAction.triggered.connect(self.greenColor)
yellowAction = QAction("Жёлтый", self)
yellowAction.setShortcut("Ctrl+Y")
brushColor.addAction(yellowAction)
yellowAction.triggered.connect(self.yellowColor)
blueAction = QAction("Синий", self)
brushColor.addAction(blueAction)
blueAction.triggered.connect(self.blueColor)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.drawing = True
self.lastPoint = event.pos()
self.pos1[0], self.pos1[1] = event.pos().x(), event.pos().y()
self.update()
def mouseMoveEvent(self, event):
if (event.buttons() and Qt.LeftButton) and self.drawing:
painter = QPainter(self.image)
painter.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
painter.drawLine(self.lastPoint, event.pos())
self.pos2[0], self.pos2[1] = event.x(), event.y()
self.lastPoint = event.pos()
self.update()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.drawing = False
self.pos2[0], self.pos2[1] = event.pos().x(), event.pos().y()
self.pryamougs.append(
[self.pos1[0], self.pos1[1], self.pos2[0] - self.pos1[0], self.pos2[1] - self.pos1[1]])
self.update()
def paintEvent(self, event):
canvasPainter = QPainter(self)
canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
if self.sost:
print(0)
w = self.pos2[0] - self.pos1[0]
h = self.pos2[1] - self.pos1[1]
self.k = (self.pos1[0], self.pos1[1], w, h)
qp = QPainter(self)
qp.begin(self)
self.rct(qp)
qp.drawRect(*self.k)
qp.end()
def save(self):
filePath, _ = QFileDialog.getSaveFileName(self, "Save Image", "",
"PNG(*.png);;JPEG(*.jpg *.jpeg);;All Files(*.*) ")
if filePath == "":
return
self.image.save(filePath)
def clear(self):
self.image.fill(Qt.white)
self.update()
def threePixel(self):
self.brushSize = 3
def fivePixel(self):
self.brushSize = 5
def sevenPixel(self):
self.brushSize = 7
def ninePixel(self):
self.brushSize = 9
def one_one_Pixel(self):
self.brushSize = 11
def one_three_Pixel(self):
self.brushSize = 13
def one_five_Pixel(self):
self.brushSize = 15
def one_seven_Pixel(self):
self.brushSize = 17
def blackColor(self):
self.brushColor = Qt.black
def whiteColor(self):
self.brushColor = Qt.white
def redColor(self):
self.brushColor = Qt.red
def greenColor(self):
self.brushColor = Qt.green
def yellowColor(self):
self.brushColor = Qt.yellow
def blueColor(self):
self.brushColor = Qt.blue
def rct(self, qp):
print('ok')
self.sost = True
#self.sost = 'ok'
#k = self.k
qp.drawRect(*self.k)
for i in self.pryamougs:
qp.drawRect(*i)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
app.exec()