всплывающие окна с рисунком matplotlib в tkinter - PullRequest
0 голосов
/ 06 марта 2019

Когда я вставляю фигуру matplotlib в мое окно tkinter, когда я запускаю свою программу, появляются дополнительные всплывающие окна. Они не влияют на функциональность моего графического интерфейса, но они немного раздражают.

Я написал базовый скрипт, который показывает проблему. Я запускаю это через Spyder:

import tkinter as tk
import matplotlib
matplotlib.use("TkAgg")

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

class MyGUI(tk.Tk):
    def __init__(self,master):
        self.f=Figure(figsize=(5,5),dpi=100)
        self.fig, self.ax= plt.subplots()

        self.canvas = FigureCanvasTkAgg(self.fig,master)


        self.toolbar=NavigationToolbar2Tk(self.canvas,master)
        #self.toolbar.update()
        self.canvas._tkcanvas.pack(padx=20, pady=20)

root =tk.Tk()
window=MyGUI(root)
root.mainloop()

Когда я запускаю это, я получаю три окна. Одним из них является корневое окно, которое показывает пустой график и панель инструментов (помечены как «tk») Это единственное окно, которое я хочу. Затем я получаю окно «Рисунок 1» с панелью инструментов и окно «Рисунок 2» с графиком и панелью инструментов. My output when I run the demo code

Из комментариев второй половины метода init, похоже, проблема в этой части.

self.f=Figure(figsize=(5,5),dpi=100)
self.fig, self.ax= plt.subplots()

self.canvas = FigureCanvasTkAgg(self.fig,master)

Однако я довольно новичок в объектно-ориентированном программировании и tkinter, и поэтому не достаточно опытен, чтобы понять, в чем ошибка. Есть идеи?

1 Ответ

1 голос
/ 06 марта 2019

Вы создаете две фигуры. Один из них создан через pyplot. Не следует пытаться встроить цифру в графическом интерфейсе. Полностью удалите pyplot и создайте только одну фигуру.

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure

class MyGUI(tk.Tk):
    def __init__(self,master):
        self.fig=Figure(figsize=(5,5),dpi=100)
        self.ax = self.fig.add_subplot(111)

        self.canvas = FigureCanvasTkAgg(self.fig,master)

        self.toolbar=NavigationToolbar2Tk(self.canvas,master)
        #self.toolbar.update()
        self.canvas._tkcanvas.pack(padx=20, pady=20)

root =tk.Tk()
window=MyGUI(root)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...