首页 > 解决方案 > 如何在 PyQtGraph PlotWidget 图中清除 ZOOM?

问题描述

我正在使用 PyQt5 和 PyQtGraph。我无法弄清楚如何在 PyQtGraph PlotWidget 中清除绘图的 ZOOM 级别。下面的代码演示。它绘制了一个红色矩形。然后使用鼠标滚轮缩小。然后单击“Button1”,代码调用 PlotWidget.clear() 方法,该方法会清除绘制的数据并重新绘制相同的蓝色矩形,但不会清除 ZOOM 级别。我假设 PlotWidget.clear() 会清除整个绘图,包括 ZOOM 级别,但我找不到 PlotWidget 方法来清除 ZOOM 级别。请参阅下面第 45 行代码中的注释“#??? 为什么不清除'ZOOM'”。

import sys
from PyQt5 import QtWidgets
import numpy as np
import pyqtgraph as pg
from pyqtgraph import PlotWidget, plot

# *********************************************************************************************
# *********************************************************************************************

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("My MainWindow")
        self.qPlotWidget = pg.PlotWidget(self)
        self.qPlotWidget.setLabel("bottom", "X-Axis")
        self.qPlotWidget.setLabel("left", "Y-Axis")

        self.qPushButton = QtWidgets.QPushButton(self)
        self.qPushButton.setText("Button1")
        self.qPushButton.clicked.connect(self.qPushButtonClicked)
        
        self.toggle = 0
        
        self.plotData()

    def plotData(self):
        data1 = np.zeros((5, 2), float) # create the array to hold the data
        data1[0] = np.array((1.0, 10.0))
        data1[1] = np.array((1.0, 20.0))
        data1[2] = np.array((2.0, 20.0))
        data1[3] = np.array((2.0, 10.0))
        data1[4] = np.array((1.0, 10.0))

        if(self.toggle == 0):
            pen1 = pg.mkPen(color=(255,0,0), width=2) # red
            self.toggle = 1
        else:
            pen1 = pg.mkPen(color=(0,0,255), width=2) # blue
            self.toggle = 0
        self.qPlotWidget.plot(data1, pen=pen1, name="data1")

    def qPushButtonClicked(self):
        print("In qPushButtonClicked")
        self.qPlotWidget.clear() # ??? why doesn't this clear the 'ZOOM'
        self.plotData()

    def resizeEvent(self, event):
        size = self.geometry()
        self.qPlotWidget.setGeometry(50, 50, size.width()-100, size.height()-100)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    screen = QtWidgets.QDesktopWidget().screenGeometry()
    w.setGeometry(100, 100, screen.width()-200, screen.height()-200) # x, y, Width, Height
    w.show()

    sys.exit(app.exec_())

标签: pythonplotpyqt5pyqtgraph

解决方案


推荐阅读