2014-02-21 27 views
1

在我加入下面的簡單代碼中,有些東西我真的不明白。我使用pyqtgraph做了一個陰謀,我用新數據更新它(我試圖在這裏簡化它)。我做了原始數據的備份,以便使用撤消按鈕進行檢索。我不知道爲什麼當我更新我的數據時,我的歷史數組中的原始數據集也被替換了。有任何線索嗎?我找不到出路......嘗試使用pyqtgraph做一個簡單的撤消方法

馬洛

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_()) 

回答

1

那是因爲你把你的dataHistory表名單:這使一個參考列表,而不是一個列表的副本。所以當你在newData中檢索列表時,你實際上獲得了原始的。您應該存儲一份副本:

if new is not None: 
    self.dataHistory.append(new[:]) # copy of new 
相關問題