Как нарисовать что либо на объекте QtCharts.QChartView?
Пробую так, но выходит ошибка :
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtCharts import *
import sys
class ChartViewMoi(QtCharts.QChartView):
def __init__(self):
super ().__init__ ()
def paintEvent(self, event:QPaintEvent):
qp = QPainter (self)
pen = QPen (Qt.black, 2, Qt.SolidLine)
qp.setPen (pen)
qp.drawLine (0, 0, 700, 700)
qp.end ()
app = QApplication(sys.argv)
mainWindow=QMainWindow()
chartView=ChartViewMoi()
mainWindow.setCentralWidget(chartView)
mainWindow.show()
sys.exit(app.exec_())
Ошибка :
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::end: Painter not active, aborted
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
'''
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtCharts import *
'''
import sys
import random
from PyQt5.Qt import *
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtChart import *
def convert(word):
return "".join(chr(e) for e in word.encode())
class ChartViewMoi(QChartView):
def __init__(self, parent=None):
super(ChartViewMoi, self).__init__(parent)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(600, 400)
self.setAttribute(Qt.WA_OpaquePaintEvent)
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
button = QPushButton("Update")
button.clicked.connect(self.draw_something)
self.series = QLineSeries(name="random serie")
for i in range(20):
self.series << QPointF(0.1 * i, random.uniform(-10, 10))
self.chart = QChart()
self.chart.setTitle("Title")
self.chart.addSeries(self.series)
self.chart.createDefaultAxes()
axis_x, axis_y = self.chart.axes()
axis_x.setLabelFormat(convert("%.2f分"))
axis_y.setLabelFormat("%dmA")
self.chartView = ChartViewMoi(self.chart)
layout = QHBoxLayout(self.central_widget)
layout.addWidget(self.chartView)
layout.addWidget(button)
def draw_something(self):
size = self.style().pixelMetric(QStyle.PM_SmallIconSize)
size = 400
pm = QPixmap(size, size)
pm.fill(Qt.transparent)
qp = QPainter(pm)
pen = QPen(QColor(Qt.red), 4)
qp.setPen(pen)
qp.drawLine(0, size/2, size, size/2)
self.label = QLabel(self)
self.label.resize(size, size)
self.label.setPixmap(pm)
self.label.show()
qp.setFont(QFont('Times New Roman', 30))
qp.drawText(100, 100, 'Hello PyQt5!')
labe2 = QLabel(self)
labe2.resize(size, size)
labe2.setPixmap(pm)
labe2.show()
pen = QPen(Qt.black, 2, Qt.SolidLine)
qp.setPen(pen)
qp.drawLine (0, 0, 300, 300)
qp.end() # !!!
labe2 = QLabel(self)
labe2.resize(size, size)
labe2.setPixmap(pm)
labe2.show()
self.update() # !!!
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
