@GSimonX37

Как рисовать кистью в PyQT5?

Хочу написать программу, которая рисует кистью, на рабочем столе (чтобы видеть весь интерфейс операционной системы) и на непрозрачном фоне.
Сейчас у меня проект состоит из одного прозрачного окна, на котором имеется QLabel во все окно и играет роль фона. Также на главном окне есть объект QPixmap, собственно, на котором и происходит все рисование.
Проблема: когда QLabel почти прозрачным (background(0, 0, 0, 2), рисование на QPixmap происходит как положено, виден интерфейс и сам рисунок. Когда я закрашиваю QLabel цветом, и делаю его непрозрачным, рисунок на QPixmap исчезает, и рисования не происходит. А мне хочется, чтобы можно было рисовать на прозрачном окне, и видеть весь интерфейс операционной системы и на каком-либо фоне, играющего роль доски. Также хочется, чтобы можно было отключать режим рисования и управлять интерфейсом операционной системы и при этом рисунок был виден.
Как это реализовать правильно? Может у меня совсем неверный подход?

class Canvas(QMainWindow):
    def __init__(self, desktop: QDesktopWidget):
        super().__init__()

        self.gui_init(desktop.width(), desktop.height())

        self.desktop: QDesktopWidget = desktop
        self.background = QLabel(self)
        self.background.setFixedSize(self.width(), self.height())
        self.background.setStyleSheet(stylesheets.CANVAS_HIDE)

        self.pixmap = QPixmap(self.width(), self.height())
        self.lastPoint = QPoint()

    def gui_init(self, w: int, h: int):
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setFixedSize(w, h)
        self.move(0, 0)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), self.pixmap)

    def mousePressEvent(self, event):
        self.lastPoint = event.pos()                            # -

    def mouseMoveEvent(self, event):
        painter = QPainter(self.pixmap)
        painter.setPen(QPen(QColor(255, 0, 0), 5, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        painter.drawLine(self.lastPoint, event.pos())
        self.lastPoint = event.pos()
        self.update()

    def mouseReleaseEvent(self, event):
        pass
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы