Не рисуется на 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()
