Python Tkinter将Matplotlib嵌入GUI
我正在尝试在用Python编码的Tkinter
GUI中嵌入图。我相信下面的代码可以成功地将图形简单地放入画布中,但是我对GUI网格中的画布位置没有任何控制。我希望能够让我的GUI的一部分成为情节……而不是全部。如何放置此画布小部件?
#!/usr/apps/Python/bin/pythonimport matplotlib, sys
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from Tkinter import *
master = Tk()
master.title("Hello World!")
#-------------------------------------------------------------------------------
f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
a.plot(t,s)
dataPlot = FigureCanvasTkAgg(f, master=master)
dataPlot.show()
dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
#-------------------------------------------------------------------------------
master.mainloop()
回答:
您没有任何其他小部件,因此很难知道您想要其他小部件的位置。不过,我可以告诉您的是:通过这样做,dataPlot.get_tk_widget().pack(side=TOP,
fill=BOTH,
expand=1)您正在让Tkinter用绘图填充屏幕。这是因为您要求它填充所有方向(fill=BOTH
)并展开以填充任何多余的空间(expand=1
)。
但是,您仍然可以添加其他小部件。pack
通过将小部件放在容器的一侧来工作。您的容器master
始终具有四个面。因此,例如,如果要创建工具栏,则可以执行以下操作:
toolbar = tk.Frame(master)button = tk.Button(toolbar, text="Push me")
button.pack(side="left") # left side of parent, the toolbar frame
toolbar.pack(side=TOP, fill="x") # top of parent, the master window
注意,如果将此代码放在绘图所在的代码
之后pack
,则工具栏将显示在底部!这是因为TOP
,BOTTOM
等等是指其他任何已经pack
编辑过的小部件留下的空间。该图占据顶部,剩余空间位于底部。因此,当您TOP
再次指定时,它的意思是“位于顶部下方区域的顶部”。
因此,您有一些选择。最好的选择是按照希望它们出现的顺序来制作窗口小部件。如果在绘图pack
之前将工具栏置于顶部pack
,则该工具栏将显示在顶部。此外,您可以将图放置在底部而不是顶部,这也将解决问题。
顺便说一句,我通常在一个块中创建我的小部件,然后将它们全部放在一个单独的块中。我发现它使代码更易于维护。
这可能适合你的心智模型的另一个更好的选择是grid
不是
pack
。使用,grid
您可以选择小部件占用的行和列。这样可以很容易地将内容布置在网格中,但是以不得不使用更多代码为代价。
例如,要将工具栏放在顶部,在下面放在下方,可以这样做:
toolbar.grid(row=1, column=1, sticky="ew")dataPlot.get_tk_widget().grid(row=1, column=1, sticky="nsew")
master.grid_rowconfigure(0, weight=0)
master.grid_rowconfigure(1, weight=1)
master.grid_columnconfigure(0, weight=1)
请注意,行和列从零开始。同样,“权重”是指此窗口小部件相对于其他窗口小部件扩展了多少。两行相等的重量,当调整窗口大小时,它们将相等地扩展。权重为零表示没有扩展。一行的权重为2,另一行的权重为1,这意味着前者的权重将是后者的两倍。
欲了解更多信息,请参阅此页面上的网格,并在包装这个页面。
以上是 Python Tkinter将Matplotlib嵌入GUI 的全部内容, 来源链接: utcz.com/qa/398476.html