我正在使用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视网膜)有关。任何帮助将不胜感激。