2015-05-21 3 views
1

Я пытаюсь разработать графический интерфейс, содержащий виджет QTextEdit. Когда gui загружается, он извлекает данные из файла, где данные находятся в столбцах фиксированной ширины.Нарисовать вертикальные линии на QTextEdit в PyQt

Я хочу, чтобы пользователь мог щелкнуть в разных точках виджета QTextEdit, чтобы отметить позиции, где начинаются новые столбцы, и я хочу, чтобы вертикальные линии рисовались на виджетах в этих позициях, чтобы показать столбцы.

В моей GUI инициализации метод() я имел следующую строку перехватывать 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().

Я делаю что-то действительно глупо здесь, или есть лучший/более простой способ сделать это?

Спасибо.

ответ

1

Я нашел ответ, надеюсь, он может помочь кому-то еще ....

Вам необходимо предоставить QPainter с видовыми виджетами при создании экземпляра QPainter в paintEvent().

Чтобы получить его для отображения текста, включите метод 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) 
Смежные вопросы