PYQT5 resize qimage event mouse pos не правильно работает

Когда я создаю окно с размером 1280 на 720 пикселей QImage берет тоже значение и я могу рисовать с помощью mouse press mouse move. То что зеленым нарисовано это правильно и оно работает когда разрешение окна 1280x720 но когда я расширяю разрешение во весь экран то позиция мыши увеличивается пропорционально левому верхнему углу. Размер во весь экран 1600x900. Красным нарисовано то что рисуется на весь экран хотя мышь ходит по зеленым пикселям. Вот изображение. Код тоже прилагаю. изображение окна

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import numpy as np
import cv2 as cv




class MyImage(QWidget):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(1280, 720)
        self.image = QImage(self.size(), QImage.Format_RGBA8888)
        self.image.fill(QColor(Qt.transparent))
        self.method = 0
        self.drawing = False
        self.lastPoint = QPoint()
        self.brushSize = 2
        self.brushColor = Qt.black
        self.inputtext = "hi"
        self.inputfont = QFont("Times New Roman", 16)
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setStyleSheet('background-image: url("src/fon.jpg")')
        self.ndi_send = 0
        self.video_frame = 0
        self.pic_size = (1280, 720)






    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.drawing = True
            self.lastPoint = event.pos()
            if self.method == 4:
                text, ok = QInputDialog.getText(self, 'Для текста                      ',
                                                'Введите текст:                        ')
                if ok:
                    self.inputtext = text
                    font, ok = QFontDialog.getFont()
                    if ok:
                        self.inputfont = font
                        painter = QPainter(self.image)
                        painter.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

                        painter.setFont(self.inputfont)
                        painter.drawText(self.lastPoint, self.inputtext)
                        self.update()

    def mouseMoveEvent(self, event):
        if (event.buttons() & Qt.LeftButton) and self.drawing and self.method == 0:
            painter = QPainter(self.image)
            painter.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            painter.drawLine(self.lastPoint, event.pos())
            self.lastPoint = event.pos()
            self.update()
        if (event.buttons() & Qt.LeftButton) and self.drawing and self.method == 3:
            painter = QPainter(self.image)
            painter.setPen(QPen(QColor(255, 255, 255, 0), self.brushSize,
                                Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_Source)
            painter.drawLine(self.lastPoint, event.pos())
            painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_SourceOver)
            self.lastPoint = event.pos()
            self.update()

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.drawing = False
        if event.button() == Qt.LeftButton and self.method == 1:
            painter = QPainter(self.image)
            painter.setBrush(QBrush(self.brushColor))
            painter.drawRect(QRect(self.lastPoint, event.pos()))
            self.lastPoint = event.pos()
            self.update()
        if event.button() == Qt.LeftButton and self.method == 2:
            painter = QPainter(self.image)
            painter.setBrush(QBrush(self.brushColor))
            painter.drawEllipse(QRect(self.lastPoint, event.pos()))
            self.lastPoint = event.pos()
            self.update()
        if event.button() == Qt.LeftButton and self.method == 5:
            painter = QPainter(self.image)
            painter.setBrush(QBrush(QColor(255, 255, 255, 0)))
            painter.setPen(QPen(self.brushColor, self.brushSize))
            painter.drawRect(QRect(self.lastPoint, event.pos()))
            self.lastPoint = event.pos()
            self.update()
        if event.button() == Qt.LeftButton and self.method == 6:
            painter = QPainter(self.image)
            painter.setBrush(QBrush(QColor(255, 255, 255, 0)))
            painter.setPen(QPen(self.brushColor, self.brushSize))
            painter.drawEllipse(QRect(self.lastPoint, event.pos()))
            self.lastPoint = event.pos()
            self.update()
        if event.button() == Qt.LeftButton and self.method == 7:
            painter = QPainter(self.image)
            painter.setPen(QPen(self.brushColor, self.brushSize))
            painter.drawLine(self.lastPoint, event.pos())
            self.lastPoint = event.pos()
            self.update()



    def paintEvent(self, event):
        canvasPainter = QPainter(self)
        if self.method == 0:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 1:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 2:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 3:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 4:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 5:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 6:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())
        if self.method == 7:
            canvasPainter.drawImage(self.rect(), self.image, self.image.rect())





class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(0, 0, 1280, 720)
        self.setWindowTitle('Paint')
        self.mywidget = MyImage()
        self.setCentralWidget(self.mywidget)

        toolbar = QToolBar()
        toolbar.setIconSize(QSize(32,32))
        self.addToolBar(toolbar)

        clearAction = QAction(QIcon("src/new.png"), "Создать", self)
        clearAction.setShortcut("Ctrl + С")
        clearAction.triggered.connect(self.clear)
        toolbar.addAction(clearAction)

        openAction = QAction(QIcon("src/open.png"), "Открыть", self)
        openAction.setShortcut("Ctrl + O")
        openAction.triggered.connect(self.open_png)
        toolbar.addAction(openAction)


        saveAction = QAction(QIcon("src/save.png"), "Сохранить", self)
        saveAction.setShortcut("Ctrl + S")
        saveAction.triggered.connect(self.save)
        toolbar.addAction(saveAction)
        self.dir_img = ""

        toolbar.addSeparator()

        self.b_size = QSpinBox()
        self.b_size.setToolTip("Размер кисти")
        self.b_size.setRange(2, 50)
        self.b_size.valueChanged.connect(self.getBrushSize)
        toolbar.addWidget(self.b_size)

        self.b_color = QPushButton(QIcon("src/color.png"), "&Цвет")
        self.b_color.clicked.connect(self.getBrushColor)
        toolbar.addWidget(self.b_color)

        toolbar.addSeparator()

        self.brush_button = QPushButton(QIcon("src/line.png"), "Кисть")
        toolbar.addWidget(self.brush_button)

        self.line_button = QPushButton(QIcon("src/line.png"), "Линия")
        toolbar.addWidget(self.line_button)

        self.rect_button = QPushButton(QIcon("src/rect.png"), "Прямоугольник")
        toolbar.addWidget(self.rect_button)

        self.ellipse_button = QPushButton(QIcon("src/ellipse.png"), "Эллипс")
        toolbar.addWidget(self.ellipse_button)

        self.text_button = QPushButton(QIcon("src/text.png"), "Текст")
        toolbar.addWidget(self.text_button)

        self.erase_button = QPushButton(QIcon("src/eraser.png"), "Ластик")
        toolbar.addWidget(self.erase_button)

        self.rectwithout_button = QPushButton(QIcon("src/rect.png"), "Прямоуг без зал")
        toolbar.addWidget(self.rectwithout_button)

        self.ellwithout_button = QPushButton(QIcon("src/ellipse.png"), "Эллипс без зал")
        toolbar.addWidget(self.ellwithout_button)

        self.spacer = QWidget()
        self.spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
        toolbar.addWidget(self.spacer)


        self.settings = QPushButton(QIcon("src/settings.png"), "Настройка")
        toolbar.addWidget(self.settings)


        self.brush_button.clicked.connect(self.getBrush)
        self.rect_button.clicked.connect(self.getRect)
        self.ellipse_button.clicked.connect(self.getEllipse)
        self.erase_button.clicked.connect(self.getErase)
        self.text_button.clicked.connect(self.getText)
        self.ellwithout_button.clicked.connect(self.getEllwithout)
        self.rectwithout_button.clicked.connect(self.getRectwithout)
        self.line_button.clicked.connect(self.getLine)





        self.method = 0






    def resizeEvent(self, event):
        self.mywidget.image.size = self.size()

    def getBrushSize(self):
        self.mywidget.brushSize = int(self.b_size.value())

    def getBrushColor(self):
        col = QColorDialog.getColor()
        if col.isValid():
            self.mywidget.brushColor = col


    def getMethod_to_image(self):
        self.mywidget.method = self.method

    def getBrush(self):
        self.method = 0
        self.getMethod_to_image()

    def getRect(self):
        self.method = 1
        self.getMethod_to_image()

    def getEllipse(self):
        self.method = 2
        self.getMethod_to_image()

    def getErase(self):
        self.method = 3
        self.getMethod_to_image()

    def getText(self):
        self.method = 4
        self.getMethod_to_image()

    def getRectwithout(self):
        self.method = 5
        self.getMethod_to_image()

    def getEllwithout(self):
        self.method = 6
        self.getMethod_to_image()

    def getLine(self):
        self.method = 7
        self.getMethod_to_image()

    def closeEvent(self, QCloseEvent):
        reply = QMessageBox.question(self, 'Закрытие программы', 'Вы уверены что хотите покинуть программу? '
                                                                 'Все не сохраненные данные будут удалены',
                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            self.mywidget.close()
            self.close()
        else:
            pass

    def clear(self):
        rgba = QColor(0,0,0,0)
        self.mywidget.image.fill(rgba)
        self.mywidget.update()

    def save(self):
        self.mywidget.image.save(f"{self.dir_img}/{QDateTime.currentDateTime().toString('yyyy_MM_dd_HH_mm_ss')}.png")


    def open_png(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
                                                  "All Files (*);;PNG (*.png)", options=options)
        if fileName:
            self.mywidget.image.load(fileName)


if __name__ == '__main__':
    App = QApplication(sys.argv)

    window = Window()
    window.show()
    sys.exit(App.exec())

Ответы (0 шт):