0

我必须使用 MNE 库中的 plot 函数,该函数返回我的绘图的 matplotlib 图。

当我在 Tkinter 下构建应用程序时,我希望该图形出现在我的应用程序的窗口中。

我使用了这段代码。该图同时出现在应用程序的窗口和另一个 matplotlib 图中。问题是应用程序中出现的内容是静态的,它只是 matplotlib 图形的一个实例,我需要一个交互式图形。


import tkinter as tk

from tkinter import ttk
from tkinter.filedialog import askopenfile

import matplotlib
matplotlib.use("TkAgg")

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
from matplotlib import pyplot as plt

import mne

root = tk.Tk()

frame2 = tk.Frame(root)
frame2.pack(side= tk.LEFT,ipadx=500,ipady=350)



#Data path
file = 'C:\\Users\\...\chb01_01.edf'

#EDF to MNE Raw
data_raw = mne.io.read_raw_edf(file, preload=True)


but1 = tk.Button(frame2, text="plot",
                    command=lambda: time_plot(data_raw))
but1.pack()


def time_plot(data_raw):
    f = data_raw.plot(duration=5, n_channels=23)
    canvas = FigureCanvasTkAgg(f, frame2)

    toolbarFrame = tk.Frame(frame2)
    toolbarFrame.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
    toolbar = NavigationToolbar2Tk(canvas, toolbarFrame)

    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)


root.mainloop()

关于如何解决问题的任何想法?

4

1 回答 1

1

我在处理类似情况时遇到了您的问题。这是我在 tkinter 小部件的画布上绘制原始 mne 数据的方式。图上方是一个退出按钮。

import mne as mn
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import pyplot as plt

root = tk.Tk()
root.wm_title("Embedding Raw Plot")

def _quit():
    root.quit()
    root.destroy()

button = tk.Button(master=root, text="Quit", command=_quit)
button.pack(side=tk.TOP)

raw = mn.io.read_raw_edf('sample.edf', preload=True)
fig=raw.plot(show=False,duration=30)


canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP)


tk.mainloop()
于 2021-05-13T19:03:08.300 回答