gpt4 book ai didi

python - 尝试用 pyqtgraph 做一个简单的撤消方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:49 25 4
gpt4 key购买 nike

我在下面加入的简单代码中确实有一些我不明白的地方。我使用 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_())

最佳答案

这是因为您将列表放入 dataHistory 表中:这会放置对列表的引用,而不是列表的副本。因此,当您检索 newData 中的列表时,您实际上获得的是原始列表。您应该存储一个副本:

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

关于python - 尝试用 pyqtgraph 做一个简单的撤消方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21939617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com