2012-09-01 8 views
5

デリミタの行を持つTextEditウィジェットを作成しようとしています。スタートとして、私は(QTextEditのサブクラスとして)MyTextEditクラスを作成し、そのpaintEvent()メソッドオーバーライドされました:PyQtでのQPaintEventのオーバーライド

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_()) 

は、このコードを実行しようとし、私は多く、次のエラーのを取得します

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 
... 

私は間違っていますか?

答えて

7

ウィジェットはviewportを持っている場合、あなたはQPainterコンストラクタにそれを渡す必要があります:それは働いていなかった理由を

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

面白い、いや、私は把握できませんでした。そのビューポートは常に私をねじ込みます。ありがとう! –