【发布时间】:2018-02-22 03:19:52
【问题描述】:
我想在QChart中做一个橡皮筋窗口,但是不知道如何将QChart的坐标映射到QChartView。
例如 (0, 0) 是一个QChart 坐标,在QChartView 中可能是(10, 10),怎么转换呢? 看到Get mouse coordinates in QChartView's axis system 的回答了
但是好像和我的要求相反。
import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries
from PyQt5.QtCore import QPointF, QEvent, QPoint, QRect
from PyQt5.QtWidgets import QApplication, QMainWindow, QRubberBand
class ChartView(QChartView):
def init_rubber_band(self):
chart = self.chart()
start1 = chart.mapToPosition(QPointF(0, 0))
start2 = chart.mapToScene(start1)
start3 = QPoint()
start3.setX(int(start2.x()))
start3.setY(int(start2.y()))
end = QPoint(200, 200)
self.rubber = QRubberBand(QRubberBand.Rectangle, self);
self.rubber.setGeometry(QRect(start3, end))
self.rubber.show()
app = QApplication(sys.argv)
series0 = QLineSeries()
series1 = QLineSeries()
series0 << QPointF(1, 15) << QPointF(3, 17) << QPointF(7, 16) << QPointF(9, 17) \
<< QPointF(12, 16) << QPointF(16, 17) << QPointF(18, 15)
series1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) \
<< QPointF(12, 3) << QPointF(16, 4) << QPointF(18, 3)
chart = QChart()
chart.addSeries(series0)
chart.addSeries(series1)
chart.createDefaultAxes()
chartView = ChartView(chart)
chartView.init_rubber_band()
window = QMainWindow()
window.setCentralWidget(chartView)
window.resize(400, 300)
window.show()
sys.exit(app.exec_())
我用mapToPosition获取原点坐标,但是好像不行。
【问题讨论】:
标签: python pyqt qchart qchartview