Я работаю над более крупным проектом, в котором у меня есть несколько сюжетов. Я могу обозначить графики иконками, чтобы они не загромождали экран. Я хотел бы отключить закрытие (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
Почему пойманная библиотека matplotlib close_event продолжает убивать мое окно ⇐ Python
Программы на Python
1731689523
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79192993/why-does-a-trapped-matplotlib-close-event-continue-to-kill-my-window[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия