在PyQt5窗口的下部绘制

我正在尝试制作一个程序,仅在屏幕的半个按钮上绘制,但是正如您所看到的,绘画向底部移动,如果我在上部绘制,则绘画发生在下部。我想要的是直接在底部绘制。

https://img1.mukewang.com/64f6d8810001fb4e06540395.jpg

这是我的代码:


from PIL.ImageEnhance import Color

from PyQt5.QtWidgets import QMainWindow, QApplication, QMenu, QMenuBar, QAction, QFileDialog, QTextEdit, QVBoxLayout, \

    QWidget, QLabel

from PyQt5.QtGui import QIcon, QImage, QPainter, QPen, QBrush, QPixmap

from PyQt5.QtCore import Qt, QPoint, QSize, QRect

import sys


import pyautogui




class Window(QMainWindow):

    def __init__(self):

        super().__init__()


        title = "Digital Waraq"


        icon = "icons/pain.png"

        [x, y] = pyautogui.size()

        self.setWindowTitle(title)

        self.setGeometry(0, 0, x, y)

        self.setWindowIcon(QIcon(icon))




        self.image = QImage(pyautogui.size().width, int(pyautogui.size().height/2), QImage.Format_RGB32)

        self.image.fill(Qt.gray)


        self.drawing = False

        self.brushSize = 2

        self.brushColor = Qt.black

        self.lastPoint = QPoint()




    def mousePressEvent(self, event):

        if event.button() == Qt.LeftButton:

            self.drawing = True

            self.lastPoint = event.pos()

            #print(self.lastPoint)



    def mouseMoveEvent(self, event):

        if(event.buttons() & Qt.LeftButton) & 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.lastPoint = event.pos()

            self.update()




    def mouseReleaseEvent(self, event):


        if event.button() == Qt.LeftButton:

            self.drawing = False



    def paintEvent(self, event):

        canvasPainter  = QPainter(self)

        #canvasPainter.drawImage(self.rect(), self.image, self.image.rect())

        newRect = QRect(QPoint(0, int(pyautogui.size().height/2)), QSize(self.image.size()))

        #canvasPainter.drawImage(newRect, self.image, self.image.rect())

        canvasPainter.drawImage(newRect, self.image, self.image.rect())

www说
浏览 104回答 1
1回答

12345678_0001

不要使在小部件内划分绘画区域的任务复杂化,更简单的解决方案是创建一个完全完成绘画的小部件,然后将其放置在主窗口的底部。import sysfrom PyQt5.QtCore import QPoint, Qtfrom PyQt5.QtGui import QBrush, QGuiApplication, QImage, QPainter, QPenfrom PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidgetclass Drawer(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self._drawing = False        self.last_point = QPoint()        self._image_layer = QImage(self.size(), QImage.Format_RGB32)        self._image_layer.fill(Qt.gray)        self.brushSize = 2        self.brushColor = Qt.black    def mousePressEvent(self, event):        self._drawing = True        self.last_point = event.pos()    def mouseMoveEvent(self, event):        if self._drawing and event.buttons() & Qt.LeftButton:            painter = QPainter(self._image_layer)            painter.setPen(                QPen(                    self.brushColor,                    self.brushSize,                    Qt.SolidLine,                    Qt.RoundCap,                    Qt.RoundJoin,                )            )            painter.drawLine(self.last_point, event.pos())            self.last_point = event.pos()            self.update()    def mouseReleaseEvent(self, event):        self._drawing = True    def paintEvent(self, event):        painter = QPainter(self)        painter.drawImage(QPoint(), self._image_layer)        painter.end()            def resizeEvent(self, event):        if (            self.size().width() > self._image_layer.width()            or self.size().height() > self._image_layer.height()        ):            qimg = QImage(                max(self.size().width(), self._image_layer.width()),                max(self.size().height(), self._image_layer.height()),                QImage.Format_RGB32,            )            qimg.fill(Qt.gray)            painter = QPainter(qimg)            painter.drawImage(QPoint(), self._image_layer)            painter.end()            self._image_layer = qimg            self.update()class Window(QMainWindow):    def __init__(self, parent=None):        super().__init__(parent)        self.drawer = Drawer()        central_widget = QWidget()        self.setCentralWidget(central_widget)        vlay = QVBoxLayout(central_widget)        vlay.setContentsMargins(0, 0, 0, 0)        vlay.addStretch(1)        vlay.addWidget(self.drawer, stretch=1)        r = QGuiApplication.primaryScreen().availableGeometry()        self.setGeometry(r)if __name__ == "__main__":    app = QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python