设置 QPainter 背景

Posted

技术标签:

【中文标题】设置 QPainter 背景【英文标题】:set QPainter background 【发布时间】:2017-10-16 21:02:52 【问题描述】:

大家好,我正在使用 QPainter 和鼠标事件,我想将 QPainter 的背景设置为黑色,我使用了这段代码但不起作用提前谢谢

class Drawer(QWidget):

    newPoint = pyqtSignal(QPoint)
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.path = QPainterPath()    

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setPen(QColor(168, 34, 3))
        painter.setFont(QFont('Decorative', 10))
        bbrush = QtGui.QBrush( QtGui.QColor(0,0,0),QtCore.Qt.SolidPattern)
        painter.setBackground(painter,bbrush)
        painter.drawPath(self.path)

    def mousePressEvent(self, event):
        self.path.moveTo(event.pos())
        self.update()

    def mouseMoveEvent(self, event):
        self.path.lineTo(event.pos())
        self.newPoint.emit(event.pos())
        self.update()

    def sizeHint(self):
        return QSize(400, 400)   

class MyWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())
        label = QLabel(self)
        drawer = Drawer(self)
        drawer.newPoint.connect(lambda p: label.setText(
                        'Coordinates: ( %d : %d )' % (p.x(), p.y())))
        self.layout().addWidget(label)
        self.layout().addWidget(drawer)

【问题讨论】:

painter.setBackground(painter,bbrush) 更改为painter.setBackground(bbrush) 谢谢伙计,但实际上我仍然没有工作我有这样的整个代码: 我不明白你想做什么,只是评论因为 setBackgound() 方法不需要 QPainter。我不明白你想要什么,你可以展示你得到的图像和你想要的另一个图像。 ***.com/questions/46633698/…你已经在这里回答的代码的结果我只想将QPainter背景设置为黑色 我不明白你说的背景是什么意思,你是说小部件的底部? 【参考方案1】:

如果您只是想获得黑色背景,您可以在没有paintEvent 的情况下获得它。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class Drawer(QWidget):

    newPoint = pyqtSignal(QPoint)

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.path = QPainterPath()    

        # set black background
        pal = self.palette()
        pal.setColor(QPalette.Background, Qt.black)
        self.setAutoFillBackground(True)
        self.setPalette(pal)

    def mousePressEvent(self, event):
        self.path.moveTo(event.pos())
        self.update()

    def mouseMoveEvent(self, event):
        self.path.lineTo(event.pos())
        self.newPoint.emit(event.pos())
        self.update()

    def sizeHint(self):
        return QSize(400, 400)


class MyWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())
        label = QLabel(self)
        drawer = Drawer(self)
        drawer.newPoint.connect(lambda p: label.setText(
                        'Coordinates: ( %d : %d )' % (p.x(), p.y())))
        self.layout().addWidget(label)
        self.layout().addWidget(drawer)


app = QApplication(sys.argv)
widget = MyWidget()
widget.show()

sys.exit(app.exec_())

【讨论】:

以上是关于设置 QPainter 背景的主要内容,如果未能解决你的问题,请参考以下文章

QPainter使用

Qt音视频开发23-视频绘制QPainter方式(占用CPU)

Qt音视频开发23-视频绘制QPainter方式(占用CPU)

使用 QPainter 的动画文本

Qt QPainter中关于坐标的注意事项

Python PyQt4 Qpainter 活动消息