gpt4 book ai didi

python - 如何检测一个轴属于一个在matplotlib中已经关闭的窗口

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:28 24 4
gpt4 key购买 nike

在 matplotlib 中,我在轴上保留一个引用。如果包含轴的窗口已关闭,我想打开一个新图形。我的想法是不断在图中添加图,直到它关闭,然后我打开一个新图。请注意,新绘图的创建是由另一个图中的事件触发的。

如果它可以帮助您理解我正在尝试做的事情,那么这里是类(class):

class DetailedPlot(object):
def __init__(self, figure):
self.origin_figure = figure

self.axis = None
self.print_figure = None

self.origin_figure.canvas.mpl_connect('button_press_event', self)


def __call__(self, event):
if event.xdata is None or event.ydata is None:
return
r = round(event.xdata - 0.025, 1)
l = round(event.ydata - 0.025, 1)
if self.axis is None or self.axis.belongs_to_a_closed_window():
self.print_figure = plt.figure()
self.axis = self.print_figure.add_subplot(111)
plotting_fcn(self.axis, r, l)

我的目标是找到一个函数,例如 belongs_to_a_closed_window

最佳答案

为什么不直接将回调连接到 “close_event”?您可以将 ax.has_been_closed 标志添加到轴对象或您的类本身。 (可能有比“has_been_closed”标志更干净的解决方案,具体取决于您在做什么...回调函数可以是任何东西。)

import matplotlib.pyplot as plt

def on_close(event):
event.canvas.figure.axes[0].has_been_closed = True
print 'Closed Figure'

fig = plt.figure()
ax = fig.add_subplot(111)
ax.has_been_closed = False
ax.plot(range(10))

fig.canvas.mpl_connect('close_event', on_close)

plt.show()

print ax.has_been_closed

编辑:(在下面扩展我的评论)如果 OSX 后端没有正确实现关闭事件,您也可以这样做:

import matplotlib.pyplot as plt

def has_been_closed(ax):
fig = ax.figure.canvas.manager
active_fig_managers = plt._pylab_helpers.Gcf.figs.values()
return fig not in active_fig_managers

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))

print has_been_closed(ax)

plt.show()

print has_been_closed(ax)

关于python - 如何检测一个轴属于一个在matplotlib中已经关闭的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027608/

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