2012-09-01 18 views
5

Sto provando a creare un widget TextEdit con una riga di delimitazione. Per cominciare, ho creato una classe MyTextEdit (come una sottoclasse di un QTextEdit) e sovrascritto il suo paintEvent() metodo:Override di QPaintEvents in PyQt

import sys 
from PyQt4.QtGui import QApplication, QTextEdit, QPainter 

class MyTextEdit(QTextEdit): 
    """A TextEdit widget derived from QTextEdit and implementing its 
     own paintEvent""" 

    def paintEvent(self, event): 
     painter = QPainter(self) 
     painter.drawLine(0, 10, 10, 10) 
     QTextEdit.paintEvent(self, event) 

app = QApplication(sys.argv) 
textEdit = MyTextEdit() 
textEdit.show() 

sys.exit(app.exec_()) 

Cercando di eseguire questo codice, ho un sacco dei seguenti errori:

QPainter::begin: Widget painting can only begin as a result of a paintEvent 
QPainter::begin: Widget painting can only begin as a result of a paintEvent 
... 

Cosa sto sbagliando?

risposta

7

Se un widget ha un viewport, si deve passare che al costruttore QPainter:

painter = QPainter(self.viewport()) 
+0

interessante, sì, non ho potuto capire perché che non funzionava. Quella visuale mi fa sempre arrabbiare. Grazie! –