Не рисуется на QFrame

Есть окно, на котором - кнопки и разные элементы. Также есть QFrame на которм я бы хотел выводить график приходящих сигналов. На главном окне все рисуется нормально, но как выделить конкретный элемент (например - фрейм) для рисования? Само окно сделано в QT Designer и импортируется с .ui. Тоесть, я делаю простой COM терминал в котором хочу отображать график сигналов

from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

import sys



def start_bt():
    print("Start")

def msg_bt():
    print("Message")


class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('main.ui', self)
        self.start.clicked.connect(start_bt)
        self.msg.clicked.connect(msg_bt)
        self.show()
    def paintEvent(self, e):
        painter = QPainter()
        painter.begin(self.frame)
        painter.drawLine(10,10,100,140)
        painter.end() 


app = QtWidgets.QApplication(sys.argv)
window = Ui()

app.exec_()

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Alexander Chernin

Лучше заведите новый фрейм-наследник, служащий для отображения сигнала:

class SignalFrame(QFrame):
    def paintEvent(self, event):
        super().paintEvent(event)
        painter = QPainter(self)
        painter.drawLine(10,10,100,140)

class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('main.ui', self)
        self.start.clicked.connect(start_bt)
        self.msg.clicked.connect(msg_bt)

        # меняем QFrame (uic.frame) на наш SignalFrame
        _frame = SignalFrame()
        self.frame.parent().layout().replaceWidget(self.frame, _frame)

        # удаляем старый frame
        self.frame.deleteLater()
        # присваиваем ссылку на новый  фрейм
        self.frame = _frame

        self.show()    


app = QtWidgets.QApplication(sys.argv)
window = Ui()
→ Ссылка