1
아래에 합류 한 간단한 코드에서 실제로 이해할 수없는 것이 있습니다. pyqtgraph를 사용하여 플롯을 만들고 새로운 데이터로 업데이트합니다 (여기서 간단하게 만들려고합니다). 실행 취소 버튼을 사용하여 복구하기 위해 원본 데이터의 백업을 수행합니다. 내 데이터를 업데이트 할 때 내 히스토리 배열의 원래 데이터 세트도 대체되는 이유는 모르겠다. 어떤 단서를 주시겠습니까? 이 목록에 목록이 아닌 사본을 참조를두고 : 나는pyqtgraph로 간단한 실행 취소 방법을 시도하십시오.
고마워 당신이 당신의 dataHistory 테이블의 목록을 가하고 있기 때문이다
from PyQt4 import QtGui
import pyqtgraph as pg
import numpy as np
import sys
class SubWindow(QtGui.QDialog):
def __init__(self, parent=None):
super(SubWindow, self).__init__(parent)
self.dataHistory = []
self.plotItem()
self.button_undo = QtGui.QPushButton()
self.button_undo.setText('Undo')
self.button_changedata = QtGui.QPushButton()
self.button_changedata.setText('change_data')
layout = QtGui.QGridLayout()
layout.addWidget(self.button_changedata , 1, 1)
layout.addWidget(self.button_undo, 2, 1)
layout.addWidget(self.pw , 3, 1)
self.setLayout(layout)
self.button_changedata.clicked.connect(self.changedata)
self.button_undo .clicked.connect(self.undo)
def plotItem(self):
self.x = np.linspace(0.0, 10.0, num=10)
self.y = np.linspace(0.0, 10.0, num=10)
self.plt = pg.PlotDataItem(self.x, self.y)
self.vb = pg.ViewBox()
self.vb.addItem(self.plt)
self.pw = pg.PlotWidget(viewBox = self.vb)
###############################################
self.history(self.y)
###############################################
def changedata(self):
self.newData()
self.plt.setData(self.x, self.y_new)
def undo(self):
self.history(None)
self.plt.setData(self.x, self.y_old)
def newData(self):
self.y_new = self.dataHistory[-1]
self.y_new[0:3] = -999
self.history(self.y_new)
def history(self, new):
if new is not None:
self.dataHistory.append(new)
else:
if len(self.dataHistory) == 1:
self.y_old = self.dataHistory[-1]
else:
del self.dataHistory[-1]
self.y_old = self.dataHistory[-1]
###############################################
print self.dataHistory
###############################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main = SubWindow()
main.resize(500,500)
main.move(app.desktop().screen().rect().center() - main.rect().center())
main.show()
sys.exit(app.exec_())