Как сделать прозрачный фон для нарисованных объектов (например, DrawLine)? - PullRequest
1 голос
/ 03 июня 2019

Я хочу создать приложение, в котором видны только нарисованные объекты (например, drawLine), а не фон.

Итак, если пользователь открывает приложение, он / она может рисовать фигуры и видеть только нарисованные фигуры.

Я новичок в pyside, но я нашел примеры, где виден только виджет, но я не думаю, что это относится к этой проблеме.

a = QPoint(22, 22)
b = QPoint(444, 444)

def __init__(self, parent=None):
    QWidget.__init__(self, parent)
    self.setGeometry(300, 300, 350, 350)
    self.setWindowTitle('Draw circles')

def paintEvent(self, event):
    paint = QPainter()
    paint.begin(self)
    paint.drawLine(self.a, self.b)
    paint.end()

Приведенная выше программа является просто примером линии, нарисованной на непрозрачном фоне. Не уверен, как перейти от этого к прозрачному фону.

1 Ответ

0 голосов
/ 04 июня 2019

Вы должны включить флаг Qt::WA_TranslucentBackground:

from PySide import QtCore, QtGui


class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)

    def paintEvent(self, event):
        a = QtCore.QPoint(22, 22)
        b = QtCore.QPoint(444, 444)

        painter = QtGui.QPainter(self)
        pen = QtGui.QPen(QtGui.QColor("red"))
        pen.setWidth(5)
        painter.setPen(pen)
        painter.drawLine(a, b)


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

enter image description here

Как говорится @ Heike кажется, что в windows необходимо добавить:

self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
...