2014-02-21 2 views
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_()) 

답변

1

... 탈출구를 찾을 수 없습니다. 따라서 newData에서 목록을 검색하면 실제로 원본을 가져옵니다. 복사본을 보관해야합니다.

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