Я хочу нарисовать изображение мышью.Я упростил проблему с помощью этого кода.Когда я раскомментирую строку 31, код не работает.Моя цель - нарисовать изображение, которое я хочу выбрать на моем компьютере, и сохранить изображение после его изменения.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(QtWidgets.QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(581, 463)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.selectImgeBtn = QtWidgets.QPushButton(self.centralwidget)
self.selectImgeBtn.setGeometry(QtCore.QRect(50, 80, 121, 61))
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(11)
self.selectImgeBtn.setFont(font)
self.selectImgeBtn.setObjectName("selectImgeBtn")
self.drawing = False
self.brushSize = 2
self.brushColor = QtCore.Qt.black
self.lastPoint = QtCore.QPoint()
self.imageLb = QtWidgets.QLabel(self.centralwidget)
self.imageLb.setGeometry(QtCore.QRect(210, 10, 331, 201))
self.imageLb.setFrameShape(QtWidgets.QFrame.Box)
self.imageLb.setText("")
self.imageLb.setObjectName("imageLb")
self.imageLb.mousePressEvent = self.mousePressEvent
self.imageLb.mouseMoveEvent = self.mouseMoveEvent
self.imageLb.mouseReleaseEvent = self.mouseReleaseEvent
# self.imageLb.paintEvent = self.paintEvent # When i uncomment this line the program is broken
self.selectImgeBtn.clicked.connect(self.setImage)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.selectImgeBtn.setText(_translate("MainWindow", "Select Image"))
def setImage(self):
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, "Select Image", "", "Image Files (*.png *.jpg *.jpeg *.bmp)")
if fileName:
pixmap = QtGui.QPixmap(fileName)
pixmap = pixmap.scaled(self.imageLb.width(), self.imageLb.height(), QtCore.Qt.KeepAspectRatio)
self.imageLb.setPixmap(pixmap)
self.imageLb.setAlignment(QtCore.Qt.AlignCenter)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.drawing = True
self.lastPoint = event.pos()
print(self.lastPoint)
def mouseMoveEvent(self, event):
if (event.buttons() == QtCore.Qt.LeftButton) and self.drawing:
painter = QtGui.QPainter(self.imageLb)
painter.setPen(QtGui.QPen(self.brushColor, self.brushSize, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin))
painter.drawLine(self.lastPoint, event.pos())
self.lastPoint = event.pos()
self.imageLb.update()
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.drawing = False
def paintEvent(self, event):
canvasPainter = QtGui.QPainter(self)
canvasPainter.drawImage(self.rect(), self.imageLb, self.imageLb.rect())
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())