Почему пойманная библиотека matplotlib close_event продолжает убивать мое окноPython

Программы на Python
Ответить
Anonymous
 Почему пойманная библиотека matplotlib close_event продолжает убивать мое окно

Сообщение Anonymous »

Я работаю над более крупным проектом, в котором у меня есть несколько сюжетов. Я могу обозначить графики иконками, чтобы они не загромождали экран. Я хотел бы отключить закрытие (X) и вместо этого просто обозначить сюжет. Используя mpl_connect(), я ожидал перехватить событие и обработать «close_event», и на этом все закончится, но этого не произошло. В прилагаемом коде, если вы покажете оба графика и закроете один из них с помощью (X). Он создает значок, но убивает тот, по которому щелкнули.
import tkinter as tk
import numpy as np
import matplotlib.pyplot as plt
import sys

# make some data
x = np.linspace(0,1,100)
sinx = np.sin(8.0*np.pi*x)
cosx = np.cos(8.0*np.pi*x)

def showPlot1():
plotMng1.window.deiconify()

def hidePlot1():
plotMng1.window.iconify()

def showPlot2():
plotMng2.window.deiconify()

def hidePlot2():
plotMng2.window.iconify()

def handle_close(event):
# Prevent the default close behavior
print("my handler called by {}".format(event))
plotMng1.window.iconify()
plotMng2.window.iconify()

def quitAll():
plt.close()
root.destroy()
sys.exit()

# make an instance of Tk
root = tk.Tk()
plt.ion()

# generate a plot
fig1, axs1 = plt.subplots()
fig1.canvas.mpl_connect('close_event', handle_close) # catch the close event
axs1.plot(x,sinx,'-', label="sin")
axs1.set_xlim(0,1)
axs1.set_ylim(-1,1)
axs1.legend(loc="upper right")
plotMng1 = plt.get_current_fig_manager()
plotMng1.window.iconify()

# generate another plot
fig2, axs2 = plt.subplots()
fig2.canvas.mpl_connect('close_event', handle_close) # catch the close event
axs2.plot(x,cosx,'-', label="cos")
axs2.set_xlim(0,1)
axs2.set_ylim(-1,1)
axs2.legend(loc="upper right")
plotMng2 = plt.get_current_fig_manager()
plotMng2.window.iconify()

tk.Button(root, text="Show 1",padx = 20, command=showPlot1).pack()
tk.Button(root, text="Hide 1",padx = 20, command=hidePlot1).pack()
tk.Button(root, text="Show 2",padx = 20, command=showPlot2).pack()
tk.Button(root, text="Hide 2",padx = 20, command=hidePlot2).pack()
tk.Button(root, text="Quit",padx = 20, command=quitAll).pack()

root.protocol("WM_DELETE_WINDOW", quitAll)
root.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/791 ... -my-window
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»