PySimpleGui如何在画布中制作情节,而不会出现在单独的窗口中



问题:我的绘图出现在窗口内的画布上,但也与绘图一起创建了一个单独的窗口图形。我想删除那个额外的窗口,因为它似乎占用资源和时间,并且可能使系统偶尔停止响应。

帮助将是感激的,这里是我的代码的一个例子,再现了这个问题。

代码示例:

import matplotlib.pyplot as plt
from os import path
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
matplotlib.use("TkAgg")
import pickle
from numpy import arange
import PySimpleGUI as sg
def draw_figure_w_toolbar(canvas, fig, canvas_toolbar):
if canvas.children:
for child in canvas.winfo_children():
child.destroy()
if canvas_toolbar.children:
for child in canvas_toolbar.winfo_children():
child.destroy()
figure_canvas_agg = FigureCanvasTkAgg(fig, master=canvas)
figure_canvas_agg.draw()
toolbar = Toolbar(figure_canvas_agg, canvas_toolbar)
toolbar.update()
figure_canvas_agg.get_tk_widget().pack(side='right', fill='both', expand=1)

class Toolbar(NavigationToolbar2Tk):
def __init__(self, *args, **kwargs):
super(Toolbar, self).__init__(*args, **kwargs)
data_folder = ''
filename = 'plot_data.p'
[t0,p0, t_filt, p_filt, band,t,p] = pickle.load(open(path.join(data_folder, path.basename(filename)),'rb'))
plot_column = [
[
sg.Button(enable_events=True, key="Plot",button_text="Plot")],
[sg.T('Controls:')],
[sg.Canvas(key='controls_cv')],
[sg.T('Figure:')],
[sg.Column(
layout=[
[sg.Canvas(key='canvas',
# it's important that you set this size
size=(400 * 2, 600)
)]
],
background_color='#DAE0E6',
pad=(0, 0)
)],]
layout_Main_window = [
[
sg.Column(plot_column),
]
]
window = sg.Window("Click detection", layout_Main_window, finalize=True, location=(30, 80))

while True:
event, values = window.read()
if event == "Exit" or event == sg.WIN_CLOSED:
break

# --------- Data folder ---------
elif event == "Plot":
fig = plt.figure(figsize=(11, 10))
plt.subplot(2,1,1)
plt.title('Original signals')
plt.plot(t0, p0,'.', label='Original signal', zorder = 0)
plt.plot(t_filt, p_filt, label='filtered ['+str(band[0])+','+str(band[1])+']', zorder = 5)
plt.legend(loc='best')
plt.ylabel('Intensity')
x_axis1 = [round(min(min(t0),min(t_filt)),1), round(max(max(t0),max(t_filt)),1)]
plt.gca().set_xlim(x_axis1)
plt.grid()

plt.subplot(2,1,2)
plt.title('Pen + equipment signal')
plt.plot(t, p, color='#ff7f0e', label='clicking period')
plt.legend(loc='best')
plt.ylabel('relative intensity')
plt.gca().set_xlim(x_axis1)
plt.xticks(arange(x_axis1[0], x_axis1[1], 0.5))
plt.xlabel('time (s)')
plt.grid()
plot_name = path.join(data_folder, path.basename(filename.replace('.p', '.png')))
plt.savefig(data_folder)

draw_figure_w_toolbar(window['canvas'].TKCanvas, fig, window['controls_cv'].TKCanvas)

fig = plt.figure(figsize=(11, 10))

应改为:

plt.ioff()
plt.figure(figsize=(11, 10))
fig = plt.gcf()

相关内容

最新更新