Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib小部件按钮在第一次单击并调用on_clicked()后无响应_Python_Matplotlib_Plot_Widget_Interactive - Fatal编程技术网

Python Matplotlib小部件按钮在第一次单击并调用on_clicked()后无响应

Python Matplotlib小部件按钮在第一次单击并调用on_clicked()后无响应,python,matplotlib,plot,widget,interactive,Python,Matplotlib,Plot,Widget,Interactive,我正在设置一个类,该类创建一条带有一些标记(X,Y)的线的简单XY图 这样做的目的是让用户可以通过拖动点来更新直线 我添加了一个“重置”按钮,该按钮可以将该行恢复为其原始值 如果我拖动一个点并点击“重置”按钮,它可以正常工作,但是如果 再次尝试拖动一个点按钮没有响应 我对matplotlib小部件还比较陌生,我肯定错过了一些明显的东西 请注意,我尝试了使用不同的后端,也尝试了在笔记本单元中使用(%matplotlib-notebook) 下面是我的“路径”类的代码: 该问题的一个最小示例是: i

我正在设置一个类,该类创建一条带有一些标记(X,Y)的线的简单XY图

这样做的目的是让用户可以通过拖动点来更新直线

我添加了一个“重置”按钮,该按钮可以将该行恢复为其原始值

如果我拖动一个点并点击“重置”按钮,它可以正常工作,但是如果 再次尝试拖动一个点按钮没有响应

我对matplotlib小部件还比较陌生,我肯定错过了一些明显的东西

请注意,我尝试了使用不同的后端,也尝试了在笔记本单元中使用(
%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)