Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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中预定义类的实例添加方法选择_Python_Matplotlib_Metaprogramming - Fatal编程技术网

向Python中预定义类的实例添加方法选择

向Python中预定义类的实例添加方法选择,python,matplotlib,metaprogramming,Python,Matplotlib,Metaprogramming,对于上下文,我试图处理matplotlib中集合实例上的鼠标事件。matplotlib也处理鼠标事件,问题是我是从networkx执行此操作的,networkx使用matplotlib.pyplot.scatter在图形上绘制节点。我不是在修改matplotlib本身,因为我认为这些特性对matplotlib没有用处 我还希望能够选择处理哪些事件,并允许用户选择在检测到鼠标事件时发生什么。例如,如果我希望某个东西是可拖动的,我会允许它处理鼠标点击、运动和取消点击事件。然而,如果我想让它只给我一个

对于上下文,我试图处理matplotlib中集合实例上的鼠标事件。matplotlib也处理鼠标事件,问题是我是从networkx执行此操作的,networkx使用matplotlib.pyplot.scatter在图形上绘制节点。我不是在修改matplotlib本身,因为我认为这些特性对matplotlib没有用处

我还希望能够选择处理哪些事件,并允许用户选择在检测到鼠标事件时发生什么。例如,如果我希望某个东西是可拖动的,我会允许它处理鼠标点击、运动和取消点击事件。然而,如果我想让它只给我一个节点的信息,它只需要处理鼠标点击事件

matplotlib有一个例子,它们将实例包装在一个可拖动的类中,连接到鼠标事件,并具有处理行为的函数。在我的例子中,我不知道我想要处理哪些事件,或者我可能没有为每个事件实现回调函数

正如我目前看到的,一个选项是创建可以绑定到实例的方法:

导入类型 将matplotlib.pyplot作为plt导入 def on_clickself,mouse_click_事件: '单击事件回调,传递鼠标单击事件 自动通过mpl_connect' 通过 节点集合=plt.scatter。。。有很多参数,返回一个PathCollection node_collection.on_click=types.MethodTypeon_click,node_collection node\u collection.figure.canvas.mpl\u connect'button\u press\u event', 节点集合。单击 我认为制作一系列函数将相对容易,这些函数可以将鼠标事件连接到集合,并为回调添加绑定方法,而不会产生任何冲突


有没有更好的办法?我读过关于类装饰器、元类和抽象基类的书,但我认为它们不适合我的特殊问题。是否有其他我没听说过的东西,或者更有可能是我听说过但没有想到要使用的东西…?

看起来您正在尝试进行猴子修补]。也许这会有帮助?是的,很有可能。我也发现了,这似乎是相关的。我要去睡觉了,明天早上我去看看