使用PyQt在QLabel上绘画

时间:2017-04-17 15:56:53

标签: qt pyqt pyqt5 qpainter qlabel

对于Python项目,我必须使用画家在已经由图片填充的Qlabel小部件上绘制图像。我的问题是我的图像系统地在我的标签后面绘制。我通过这段代码简化了问题,我的目标是将“cigale1.png”绘制到标签上的“arrierplan.png”中:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from test_ihm_main import *


class MonAppli(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.Label.setPixmap(QtGui.QPixmap("arrierplan.png"))
        self.paintEvent(self.ui.Label)

    def paintEvent(self,e):
        qp = QtGui.QPainter(self)
        qp.begin(self)
        qp.drawPixmap(450,50,QtGui.QPixmap("cigale1.png"))
        qp.end()  



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MonAppli()
    window.show()
    app.exec_()

这是我的Ui_MainWindow课程:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Quitter = QtWidgets.QPushButton(self.centralwidget)
        self.Quitter.setGeometry(QtCore.QRect(670, 520, 113, 32))
        self.Quitter.setObjectName("Quitter")
        self.Label = QtWidgets.QLabel(self.centralwidget)
        self.Label.setGeometry(QtCore.QRect(400, 30, 361, 231))
        self.Label.setText("")
        self.Label.setObjectName("Label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.Quitter.clicked.connect(MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.Quitter.setText(_translate("MainWindow", "Quitter"))

我已经阅读了很多文档,阅读了很多主题,但没有任何效果......

先谢谢,

T.C

1 个答案:

答案 0 :(得分:2)

出现问题的原因是SELECT [COLUMNLIST 1:1 RENAMED] FROM (your view) 高于WITH,当您应用此功能时,会在其上绘制,因此不会显示。

应该在QLabel中覆盖paintEvent函数,为此我们将创建一个继承自Qlabel的类,名为Label。

QLabel

为了能够使用它,将其添加到Ui_MainWindow类的文件中,您必须更改:

QMainWindow

class Label(QtWidgets.QLabel):
    def __init__(self, parent=None):
        super(Label, self).__init__(parent=parent)

    def paintEvent(self, e):
        super().paintEvent(e)
        qp = QtGui.QPainter(self)
        qp.drawPixmap(100,100,QtGui.QPixmap("cigale1.png")) 

<强>结果:

<强> arrierplan.png

enter image description here

<强> cigale1.png

enter image description here

<强>输出

enter image description here