当前位置: 首页 > 面试题库 >

Python Tkinter将Matplotlib嵌入GUI

司寇飞航
2023-03-14
问题内容

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

#!/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等等是指其他任何已经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,这意味着前者的权重将是后者的两倍。

欲了解更多信息,请参阅此页面上的网格,并在包装这个页面。



 类似资料:
  • 问题内容: 我目前正在尝试将要绘制的图形嵌入我设计的pyqt4用户界面中。因为我几乎完全不熟悉编程,所以我不了解人们在我发现的示例中的嵌入方式- 这个(在底部) 和那个。 如果有人可以发布分步说明,或者至少在一个pyqt4 GUI中仅创建例如图形和按钮的至少非常小而非常简单的代码,那将是非常棒的。 问题答案: 我目前正在尝试将要绘制的图形嵌入我设计的pyqt4用户界面中。因为我几乎完全不熟悉编程,

  • 问题内容: 请告诉我如何将Java模块/源代码嵌入C#应用程序中?例如,我有一些用Java编写的逻辑,该逻辑使用了一些第三方库,这些库只能在Java平台上找到。而且我有用C#编写的主要主机逻辑。如果我能够将来自Java的回调注册到C#中,那将非常酷。 非常感谢你!!! 问题答案: 您可以尝试IKVM吗? IKVM.NET对于几种不同的软件开发方案很有用。这里是一些可能性的示例。 嵌入式JVM 在.

  • 问题内容: 我发现了一个开源应用程序,该应用程序创建了一个JFrame来显示一些内容。我想将此JFrame “嵌入” 到applet中,因此Jframe中显示的所有内容都将显示在applet中- 这可能吗? 谢谢你的帮助! 问题答案: 创建框架的实例。 获取框架的内容窗格。 将内容窗格添加到小程序。

  • 问题内容: 我正在尝试在HTML 的元素上显示png图像。该按钮与图像的大小相同,并且显示了图像,但由于某种原因不在中心,因此无法看到全部。换句话说,图像的右上角似乎位于按钮的中心而不是按钮的右上角。 这是HTML代码: 更新: 我认为实际发生的是利润问题。我得到两个像素的边距,因此背景图像从按钮中消失了。该按钮和图像的大小相同,这是唯一的,所以这是非常noticable ......我试过,但它

  • 问题内容: 如何在Go的结构中嵌入频道? 为什么映射语法之间不一致: 和渠道, ? 为了明确起见,在Go中可以将一个类型嵌入另一个类型。嵌入类型可以访问在嵌入类型上定义的所有方法,但是也可以通过其类型名称显式引用嵌入类型。因此,映射类型声明和通道类型声明之间的不一致会使想要引用嵌入式通道类型的人感到困惑。 问题答案: 问题在于, 嵌入 主要使您可以从嵌入类型的方法中受益(如“ 在Go中嵌入而不是继

  • 我正在尝试让Apache FOP使用Arial作为字体。到目前为止,没有运气。 在我的config.xml它说: 但这似乎行不通。当我在命令行上启动FOP时,它显示未找到字体Arial normal。 我试图用fop中的ttfReader从TTF中生成Arial.xml文件,但是也没有成功(即使按照FOP网页上的说明)。我得到以下错误消息: 也许我没有看到树木的阿甘,但我不知所措。 有什么建议吗?