放大时,图像(图形)的一部分会超出可见区域的边缘。理论上,您可以通过移动滚动滑块(滚动)(2)通过移动箭头来看到这个消失的部分(1)(3)在线地图具有拖放功能,但这不是我们的情况。
由于某些原因(没有鼠标,只有键盘),需要使用“用箭头移动图形”的方法。如何实施?
此外,图表的起始图像必须完全适合屏幕。
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
import math
import sys
class Charts(QWidget):
def __init__(self, parent=None):
super(Charts, self).__init__(parent)
self.zoomFactor = 1.1
self.zoom_value = 0
self.chart = QChart()
self.series1 = QLineSeries()
for i in range(0,2500,1):
self.series1.append([QPointF(i, math.sin(i * 0.01))])
self.chart.addSeries(self.series1)
y_axis = QValueAxis()
y_axis.setRange(-1, 1)
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.chart.addAxis(x_axis, Qt.AlignmentFlag.AlignBottom)
self.chart.addAxis(y_axis, Qt.AlignmentFlag.AlignLeft)
self.chart.legend().hide()
self.chart.createDefaultAxes()
self.chartview = QChartView(self.chart)
self.chartview.setRenderHint(QPainter.Antialiasing)
vbox = QVBoxLayout()
vbox.addWidget(self.chartview)
self.setLayout(vbox)
def keyPressEvent(self, keyEvent):
key = keyEvent.key()
if key == Qt.Key_W and self.zoom_value < 10:
self.chartview.chart().zoom(self.zoomFactor)
self.zoom_value = self.zoom_value + 1
elif key == Qt.Key_S and self.zoom_value > 0:
self.chartview.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())
仅增加一个轴;添加第二个轴很容易。另外,我们没有使用zoom(),这提供了更多的可能性。