[PyQT] Dessiner avec QPainter
Bonjour,
Je définit un objet avec un QLabel et un QPixmap dans lequel je vais dessiner :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class preview(QGroupBox):
def __init__(self, width=400, height=300):
super().__init__()
self.__margin = 5
self.__width = width
self.__height = height
self.setTitle('Preview')
self.__layout = QVBoxLayout()
self.setLayout(self.__layout)
self.__label = QLabel()
canvas = QPixmap(width, height)
canvas.fill(Qt.white)
self.__label.setPixmap(canvas)
self.__layout.addWidget(self.__label)
#self.draw(5, 5, 290, 290)
def draw(self, x, y, width, height, color='black'):
painter = QPainter(self.__label.pixmap())
pen = QPen()
pen.setWidth(3)
pen.setColor(QColor(color))
painter.setPen(pen)
painter.drawRect(x, y, width, height)
painter.end() |
Dans l'interface de ma QMainWindow, je met une instance de mon objet preview et un bouton, quand je clique sur le bouton, il doit appeler la méthode draw de l'objet preview pour dessiner sur le canvas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class myApp(QMainWindow):
''' Fenêtre principale de l'interface graphique
'''
def __init__(self, parent=None):
super().__init__(parent, Qt.WindowFlags())
self.__chartPreview = preview()
self.__mainLayout = QVBoxLayout()
self.btntest = QPushButton('Test')
self.btntest.clicked.connect(self.test)
self.__mainLayout.addWidget(self.__chartPreview)
self.__mainLayout.addWidget(self.btntest)
def test(self):
self.__chartPreview.draw(5, 5, 290, 290) |
Mais quand je clique sur le bouton, ça ne dessine rien. Si je met une appel à draw dans le __init__ du l'objet preview (cf. ligne en commentaire), ça me dessine bien un rectangle dans le canvas.
Qu'est ce qui cloche?
Merci,
Nico