我正在尝试开发一个包含 QTextEdit 小部件的 GUI。当 gui 加载时,它从文件中提取数据,其中数据位于固定宽度的列中。
我希望用户能够单击 QTextEdit 小部件中的各个点,以标记新列开始的位置,并且我希望在这些位置的小部件上绘制垂直线,以显示列。
在我的 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() 方法以来,最初在小部件中显示的文本不再显示。
我在这里做了一些非常愚蠢的事情,还是有更好/更简单的方法来解决这个问题?
谢谢。
最佳答案
我找到了答案,希望对其他人有帮助......
在paintEvent()中创建QPainter实例时,您需要为QPainter提供小部件视口(viewport)。
要让它显示文本,请包含父类的 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)
关于python - 在 PyQt 中的 QTextEdit 上绘制垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30371613/