Как разместить виджет 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> ПКМ</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())