gpt4 book ai didi

Python Tkinter 在 GUI 中嵌入 Matplotlib

转载 作者:IT老高 更新时间:2023-10-28 20:54:20 26 4
gpt4 key购买 nike

我正在尝试在我的 Tkinter GUI 中嵌入一个用 Python 编码的绘图。我相信下面的代码成功地将图形简单地放入 Canvas 中,但我无法控制 GUI 网格中的 Canvas 位置。我希望能够让我的 GUI 的一个小部分成为情节……而不是全部。如何定位此 Canvas 小部件?

#!/usr/apps/Python/bin/python
import 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 绘图的代码之后,工具栏会显示在底部!这是因为 TOPBOTTOM 等指的是任何其他已被 packed 的小部件留下的空间。情节占据了顶部,剩下的空间在底部。因此,当您再次指定 TOP 时,它的意思是“位于顶部下方区域的顶部”。

所以,你有一些选择。最好的选择是按照您希望它们出现的顺序制作小部件。如果在 pack 绘图之前pack 顶部的工具栏,它将是显示在最顶部的工具栏。此外,您可以将绘图放在底部而不是顶部,这也可以解决问题。

顺便说一句,我通常在一个 block 中创建我的小部件,然后将它们全部放在一个单独的 block 中。我发现它使代码更易于维护。

另一个更适合你的心智模型的选择是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,表示前者的扩展量是后者的两倍。

有关详细信息,请参阅 this page on grid , 和 this page on pack .

关于Python Tkinter 在 GUI 中嵌入 Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com