我正在尝试开发一个包含QTextEdit小部件的GUI。当gui加载时,它从文件中提取数据,其中数据是固定宽度的列。
我希望用户能够在QTextEdit小部件中的各个点处单击,以标记新列开始的位置,并且我希望在这些位置的小部件上绘制垂直线,以显示列。 / p>
在我的GUI init ()方法中,我使用以下行拦截文本小部件中的paintEvent:
self.mytextviewer.paintEvent = self.handlePaintEvent
我有一个handlePaintEvent()方法:
def handlePaintEvent(self, event):
painter = QPainter(self.mytextviewer)
pen = QPen(Qt.SolidLine)
pen.setColor(Qt.black)
pen.setWidth(1)
painter.setPen(pen)
painter.drawLine(20, 0, 20, 100)
然而,当我试图运行代码时,我开始得到关于画家没有活动的QPainter错误。
然后我尝试了另一个方向,继承QTextEdit并将基本相同的代码添加到我的子类的paintEvent()方法中。但是我仍然遇到错误。
然后我尝试将painter.begin(self)
和painter.end()
添加到paintEvent()方法中,但对此也没有任何乐趣。
此外,由于我添加了自定义的paintEvent()方法,因此不再显示最初显示在窗口小部件中的文本。
我在这里做了一些非常愚蠢的事情,还是有更好/更容易的方法来解决这个问题?
感谢。
答案 0 :(得分:1)
我找到了答案,希望它可以帮助别人......
在paintEvent()中创建QPainter实例时,需要为小部件视口提供QPainter。
要使其显示文本,请包含父类的super()方法。
def paintEvent(self, event):
painter = QPainter(self.viewport())
pen = QPen(Qt.SolidLine)
pen.setColor(Qt.black)
pen.setWidth(1)
painter.setPen(pen)
painter.drawLine(20, 0, 20, 100)
super(TextWidgetWithLines, self).paintEvent(event)