图未在python tkinter gui中显示

时间:2019-07-15 23:50:47

标签: python matplotlib tkinter figure dpi

我正在使用tkinter编写一个简单的gui,以读取一些数据,进行一些计算并绘制输出。我正在Mac上工作,在Spyder IDE中使用python 3。

我计划将gui窗口分为两帧:左一带有一些输入项和按钮,右一用于绘制。下面是一个最小的工作示例,其中只有一个按钮可以退出,并有一个简单的图。

import tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np

class App(tkinter.Tk):

    def __init__(self):
        super().__init__()
        self.set_figure()


    def set_figure(self):

        fig = Figure(figsize=(8, 8), dpi=25)
        t = np.arange(0, 3, .01)
        fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

        fr1 = tkinter.LabelFrame(self, width = 300, height = 100)
        fr1.pack(side='left', fill='both', expand = 1)

        fr2 = tkinter.LabelFrame(self, width = 300, height = 100)
        fr2.pack(side='left', fill='both', expand = 1)

        canvas = FigureCanvasTkAgg(fig, master=fr2)
        canvas.draw()
        canvas.get_tk_widget().pack()

        button = tkinter.Button(master=fr1, text='Quit', command = self._quit, width=25)
        button.pack(side=tkinter.BOTTOM)        

    def _quit(self):
        self.destroy()

if __name__ == "__main__":
    app = App()
    app.mainloop()

问题是,当图形的dpi较小时,在右框架上将什么也不显示。例如,如果figsize设置为(8,8),则dpi小于29时,该图将不会显示。但是,如果dpi> 30,它将可以使用。

我尝试并测试了一下,看来这对于figsize * dpi是一个极限值。小于此值,该数字将不会显示。这个值取决于几件事,尤其是按钮大小的大小。

我对此没有任何线索。我猜可能与我对matplotlib的设置有关,可能与我的操作系统和屏幕(13英寸Mac视网膜)有关。任何帮助将不胜感激。

enter image description here

0 个答案:

没有答案