PyQt

2012-09-01 10 views
5

में QPaintEvents को ओवरराइड करना मैं एक टेक्स्ट एडिट विजेट बनाने की कोशिश कर रहा हूं जिसमें एक डिलीमीटर लाइन होगी। एक शुरुआत के रूप में, मैं (एक QTextEdit का एक उपवर्ग के रूप में) एक MyTextEdit वर्ग बना लिया है और इसकी paintEvent() विधि अधिरोहित: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_()) 

, मैं बहुत निम्न त्रुटियों की पाने के लिए इस कोड को निष्पादित करने की कोशिश कर रहा

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

दिलचस्प, हां, मैं बाहर क्यों कि काम कर रहा था समझ नहीं सकता है। वह व्यूपोर्ट हमेशा मुझे खराब कर देता है। धन्यवाद! –