有一个图表可以通过按热键来放大。
问题 1. 如何添加自动添加垂直和水平滚动条(滚动条)并能够使用箭头移动。
问题2:改变比例时,需要重新计算坐标轴的值。
import sys
import math
from PySide6.QtWidgets import QWidget, QApplication, QHBoxLayout, QScrollArea, QVBoxLayout
from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis
from PySide6.QtCore import QPointF
from PySide6.QtGui import QPainter, Qt
class Charts(QWidget):
def __init__(self, parent=None):
super(Charts, self).__init__(parent)
self.series1= QLineSeries()
self.zoomFactor = 1.1
self.zoom_value = 0
self.chart1 = QChart()
for i in range(0,2500,1):
self.series1.append([QPointF(i, math.sin(i * 0.01))])
self.chart1.addSeries(self.series1)
y_axis = QValueAxis()
y_axis.setRange(-100, 100)
y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
y_axis.setTickInterval(20)
x_axis = QValueAxis()
x_axis.setRange(1, 2500)
x_axis.setTickInterval(100)
x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
self.chart1.addAxis(x_axis, Qt.AlignmentFlag.AlignBottom)
self.chart1.addAxis(y_axis, Qt.AlignmentFlag.AlignLeft)
self.chart1.legend().hide()
self.chartview1 = QChartView(self.chart1)
self.chartview1.setRenderHint(QPainter.Antialiasing)
vbox = QVBoxLayout()
vbox.addWidget(self.chartview1)
self.setLayout(vbox)
def keyPressEvent(self, keyEvent):
key = keyEvent.key()
if key == Qt.Key_W and self.zoom_value < 10:
self.chartview1.chart().zoom(self.zoomFactor)
self.zoom_value = self.zoom_value + 1
elif key == Qt.Key_S and self.zoom_value > 0:
self.chartview1.chart().zoom(1 / self.zoomFactor)
self.zoom_value = self.zoom_value - 1
if __name__ == '__main__':
app = QApplication(sys.argv)
charts = Charts()
charts.show()
sys.exit(app.exec())
尝试这个: