Python Matplotlib小部件按钮在第一次单击并调用on_clicked()后无响应
我正在设置一个类,该类创建一条带有一些标记(X,Y)的线的简单XY图 这样做的目的是让用户可以通过拖动点来更新直线 我添加了一个“重置”按钮,该按钮可以将该行恢复为其原始值 如果我拖动一个点并点击“重置”按钮,它可以正常工作,但是如果 再次尝试拖动一个点按钮没有响应 我对matplotlib小部件还比较陌生,我肯定错过了一些明显的东西 请注意,我尝试了使用不同的后端,也尝试了在笔记本单元中使用(Python Matplotlib小部件按钮在第一次单击并调用on_clicked()后无响应,python,matplotlib,plot,widget,interactive,Python,Matplotlib,Plot,Widget,Interactive,我正在设置一个类,该类创建一条带有一些标记(X,Y)的线的简单XY图 这样做的目的是让用户可以通过拖动点来更新直线 我添加了一个“重置”按钮,该按钮可以将该行恢复为其原始值 如果我拖动一个点并点击“重置”按钮,它可以正常工作,但是如果 再次尝试拖动一个点按钮没有响应 我对matplotlib小部件还比较陌生,我肯定错过了一些明显的东西 请注意,我尝试了使用不同的后端,也尝试了在笔记本单元中使用(%matplotlib-notebook) 下面是我的“路径”类的代码: 该问题的一个最小示例是: i
%matplotlib-notebook
)
下面是我的“路径”类的代码:
该问题的一个最小示例是:
import numpy as np
a = np.array([1,2,3])
b = a
b[1] = 1000
print(a)
它打印[1,1000,3]
,即使您似乎只修改了b
,a
。这是因为它们是相同的数组
因此,与其复制对同一数组的引用,不如复制该数组,或者只使用其值
import numpy as np
a = np.array([1,2,3])
b = np.copy(a)
b[1] = 1000
print(a)
就你而言
self.xcoords[:] = self.original_xcoords
self.ycoords[:] = self.original_ycoords
或
长话短说:您应该更改重置功能:
self.xcoords = np.copy(self.original_xcoords)
self.ycoords = np.copy(self.original_ycoords)
简而言之,Python中的所有变量都类似于对象的链接。当您写入a=5
时,a
获取到对象“5”的链接,当您写入b=a
时,b
获取到对象“5”的链接,作为a
。您的self.coords
和self.original\u coords
也会出现同样的情况。您必须复制它们以创建它们链接到的不同对象。在第一次调用reset()函数后,它们链接到同一个对象。
您在那里保存了不好的coords,因此从现在起,您的
self.xcoords
和self.original\u coords
对象链接到了同一个对象当然可以!谢谢你。我知道这是件愚蠢的事。
self.xcoords = np.copy(self.original_xcoords)
self.ycoords = np.copy(self.original_ycoords)
self.xcoords = np.copy(self.original_xcoords)
self.ycoords = np.copy(self.original_ycoords)