Как разместить виджет QLabel поверх графика QChart?

Можно ли добавить виджет поверх графика?
Виджет нужен что-то типа QTextEdit или многострочный QLabel, пока не решил, главное возможность размещения строк текста.

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

import sys
from math import sin
from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView
from PySide6.QtCore import Qt, QObject, QCoreApplication, QPointF


class Chart1(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.series1 = QLineSeries()
        for i in range(0, 500, 1):
            self.series1.append([QPointF(i, sin(i * 0.05))])
        self.chart.addSeries(self.series1)
        self.chart.createDefaultAxes()
        self.chart.axisX().setRange(0, 500)
        self.chart.axisY().setRange(-5,5)
        self.chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chart_view)
        self.setLayout(vbox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart1()
    window.show()
    sys.exit(app.exec())

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

Автор решения: S. Nick

Да, возможно. Суть заключается в том, что родителем вашей, например QLabel, должен быть виджет (QChartView), на котором вы собираетесь разместить этот QLabel.

Как вариант, это может выглядеть так:

import sys
from math import sin
'''
from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView
from PySide6.QtCore import Qt, QObject, QCoreApplication, QPointF
'''
from PyQt5.Qt import *
from PyQt5.QtChart import *


class Label(QLabel):
    def __init__(self, title, parent):
        super(Label, self).__init__(title, parent)
        
    def mouseMoveEvent(self, event):
        if not (event.buttons() & Qt.RightButton):    
            return
        drag = QDrag(self)
        mimedata = QMimeData()
        mimedata.setText(self.text())
        if mimedata.hasText():
            print("hattext")  
        else:
            print("hasnotext")
        drag.setMimeData(mimedata)
        drag.exec_(Qt.CopyAction)    


class ChartView(QChartView):
    def __init__(self, chart1, parent):
        super(ChartView, self).__init__(parent)
        self.chart1 = chart1
        self.setAcceptDrops(True)

    def dragMoveEvent(self, e):        
        e.accept()
        
    def dragEnterEvent(self, e):
        e.accept()
        
    def dropEvent(self, e):
        if e.mimeData().hasText():
            indy = e.pos().y()
            indx = e.pos().x()
            #print("index", indx, indy)
            self.chart1.label.move(indx, indy)
            e.setDropAction(Qt.CopyAction)     
            e.accept()
        

class Chart1(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setAcceptDrops(True)
        
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.series1 = QLineSeries()
        for i in range(0, 500, 1):
            self.series1.append([QPointF(i, sin(i * 0.05))])
        self.chart.addSeries(self.series1)
        self.chart.createDefaultAxes()
        self.chart.axisX().setRange(0, 500)
        self.chart.axisY().setRange(-5,5)
        
        self.chart_view = ChartView(self, self.chart)
        
        vbox = QVBoxLayout(self)
        vbox.addWidget(self.chart_view)
      
        self.label = Label(
            '<h3>Это Label <br>Перетащи меня!<br>&nbsp;&nbsp;&nbsp;ПКМ</h3>', 
            self.chart_view)

            
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart1()
    window.resize(500, 400)
    window.show()
    sys.exit(app.exec())

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

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

→ Ссылка
Автор решения: Garp
import sys
from PySide6.QtCharts import QChart, QChartView, QLineSeries
from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PySide6.QtCore import Qt, QPointF, QObject
from math import sin


class Label(QLabel):
    def __init__(self, title, parent):
        super(Label, self).__init__(title, parent)
        self.move(150,100)


class ChartView(QChartView):
    def __init__(self, chart1, parent):
        super(ChartView, self).__init__(parent)
        self.chart1 = chart1


class Chart1(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.series1 = QLineSeries()
        for i in range(0, 500, 1):
            self.series1.append([QPointF(i, sin(i * 0.05))])
        self.chart.addSeries(self.series1)
        self.chart.createDefaultAxes()
        self.chart.axisX().setRange(0, 500)
        self.chart.axisY().setRange(-5, 5)
        self.chart_view = ChartView(self, self.chart)
        vbox = QVBoxLayout(self)
        vbox.addWidget(self.chart_view)
        self.label = Label(
            '<h3>_____Title_____</h3>\n'
            '--------------------------------------------------------------\n'
            '999999999999999999999999999999\n'
            'cccccccccccccccccccccccccccccc\n'
            'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
            self.chart_view)
        self.label.setWordWrap(True)
        self.label.setStyleSheet("background-color:yellow;border:1px solid black;padding :15px;")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart1()
    window.resize(500, 400)
    window.show()
    sys.exit(app.exec())
→ Ссылка