当我尝试在QLabel上绘制一些东西时,为什么pixmap(足球场图像)会消失?

时间:2013-02-19 21:43:14

标签: pyqt pyqt4 qpainter qpixmap

伙计们。我有一张带有像素图的QLabel - 一张PNG图片(通常是一个足球场),我想在操场上画一些矩形画(代表一些机器人),我使用画家类实际绘制其容器 - QLabel。但是当我使用画家绘制REC时,RECT显示但是图像只是变成了空白。我不知道它为什么会失败,你能不能帮我一个忙,并给我一些提示?

class FieldLabel(QtGui.QLabel):

    positionData = {"1":{"x":13,"y":20},"2":{"x":28,"y":19},"3":{"x":17,"y":21}}
    def __init__(self, image_path):
        QtGui.QLabel.__init__(self)
        self.field = QtGui.QPixmap("field.png")
        self.setPixmap(self.field.scaled(self.size(),
                                         QtCore.Qt.KeepAspectRatio))
        self.setSizePolicy(QtGui.QSizePolicy.Expanding,
                           QtGui.QSizePolicy.Expanding)
        self.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)


    def paintEvent(self,e):
        draw = QtGui.QPainter()
        draw.begin(self)
        draw.setBrush(QtCore.Qt.NoBrush)
        draw.setPen(QtCore.Qt.blue)
        draw.drawRect(0,0,10,10)
        draw.end()

1 个答案:

答案 0 :(得分:1)

paintEvent负责绘制小部件中的所有内容。由于您要覆盖它,因此不会调用QLabel绘制QPixmap的默认实现。

所以,首先你应该让QLabel做它的绘画,然后你可以随意画它:

def paintEvent(self,e):
    # call the base implementation to paint normal interface
    super(FieldLabel, self).paintEvent(e)

    # then paint over it
    draw = QtGui.QPainter()
    draw.begin(self)
    draw.setBrush(QtCore.Qt.NoBrush)
    draw.setPen(QtCore.Qt.blue)
    draw.drawRect(0,0,10,10)
    draw.end()