PyQt: pintar dintre d'un widget

De Cacauet Wiki
La revisió el 17:37, 16 gen 2013 per Enric (discussió | contribucions) (Es crea la pàgina amb «Anem a pintar els nostres propis widgets en Qt. Per fer això es fa de la següent manera: * Creem la nostra '''classe derivant-la de QWidget''' (en el nostre exemple la …».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Anem a pintar els nostres propis widgets en Qt. Per fer això es fa de la següent manera:

  • Creem la nostra classe derivant-la de QWidget (en el nostre exemple la classe Pantalla)
  • Reimplementem el mètode paintEvent que es crida automàticament quan es repinta el Widget.
  • Dintre de paintEvent(self,e) podem pintar el què vulguem mitjançant el QPainter

Classe derivada

class Pantalla(QtGui.QWidget):
    def __init__(self):
        # ULL: cridar el constructor de la classe base és IMPRESCINDIBLE
        # (si sobreescrivim el constructor __init__, si no, no cal)
        super(QtGui.QWidget,self).__init__()
        self.initUI()
    
    def initUI(self):
        # inicialitzem aqui si tenim objectes interns
        pass

    def paintEvent(self,e):
        # podriem liar-nos a pintar aquí mateix, o examinar l'event "e"
        # anem al lio...
        self.pintaPilota()
        
    def pintaPilota(self):
        # necessitem un objecte QPainter
        qp = QtGui.QPainter()
        qp.begin(self)
 
        # podem optar per un Pen (pinta perifèric)
        color = QtGui.QColor(0, 0, 0)
        color.setNamedColor('#d4d4d4')
        qp.setPen(color)
        # o bé per un Brush (farcit). El color és RGB, òbviament
        qp.setBrush(QtGui.QColor(200, 0, 0))

        # PER FI, PINTEM LA PILOTA!
        posx, posy = 20, 20
        radx, rady = 10, 10
        qp.drawEllipse(20,20,10,10)
 
        # i tanquem el QPainter abans d'acabar
        qp.end()


Exercicis

Ara cal que realitzis els següents exercicis: