【问题标题】:Can I embed a matplotlib plot in a Tcl/Tk application?我可以在 Tcl/Tk 应用程序中嵌入 matplotlib 图吗?
【发布时间】:2016-04-22 10:22:57
【问题描述】:

我想知道从 Tcl 解释器调用 matplotlib 并绘制到在 Tcl 端创建的 Tk 画布会有多困难。

我想知道最好的方法是什么。

我猜我必须创建一个 python 解释器,将画布句柄从 Tcl 端传递给 python,并在两种语言中使用 C API。还是有更优雅的方式?

【问题讨论】:

  • 那么,你想用 Python 和 tkinter 还是 tcl/tk 来做呢?
  • python 有tkinter 模块,它是tk 包装器,tkinter 可以与matplotlib 一起使用。
  • 创建 GUI 和画布小部件的代码在 Tcl 中。
  • 如果你得到这个工作,它会引起很多人的兴趣。这根本不是一个小项目。

标签: python matplotlib tkinter tcl tk


【解决方案1】:

正确进行这种集成并非易事。但是,这就是我的想法:

连接 Python 和 Tcl

显然你可以运行不如 Tcl 的 Python。根据this wiki page,有一个名为tclpython 的包可以为您完成基本的集成工作,并且page linked to 出现在现场。代码似乎是here,尽管它可能需要一些工作才能构建。 (我从未尝试过。)

连接 matplotlib 和 Tk

您可以让 matplotlib 在 Tkinter 窗口上绘制,只要您可以使用正确的选项制作该 Tkinter 窗口,它就会显示出来。关键是可以通过winfo id $nameOfTheWindow 从 Tk 中找到底层系统窗口 ID。如果您创建一个框架,并将 -container 选项设置为 true(这会关闭一些东西并打开一些其他东西;您需要明确设置大小),那么该特定框架将适合与 TkAgg 一起使用python/matplotlib 方面。关键是在将-use 选项设置为从winfo id 检索到的ID 的那一侧创建一个顶层。您可能需要确保 python 端在与外部 Tcl/Tk 的单独线程中运行其渲染以使事件处理正常工作(除非您热衷于进行深度事件循环黑客攻击;情况是您实际上将在 Tcl/Tk 中的 Python 中包含 Tcl/Tk,因为 Tkinter 通过委托给从属 Tcl/Tk 来工作,并且将所有这些正确地粘合在一起将“有点棘手”)。

如果这不起作用,请让 matplotlib 呈现为图像(GIF 或 PNG;如果您有 Tk 8.6,则首选后者),因为您可以通过照片图像轻松地显示它。如果没有线程游戏,这绝对是可能的;它只是传递纯数据。可能较慢且不具有交互性,但这可能与您正在做的事情无关,而且在简单的情况下更容易。

如果您使用的是 Windows 或 OSX,您可能可能需要第二种方法,因为 Tk 实际上并没有使用 X11。 (当然,除非您使用的是更不正当的配置选项之一。)

【讨论】:

  • 谢谢。我的应用程序是非常实时和多线程的(我们选择 Tcl 是因为它是开箱即用的事件循环和出色的线程模型),所以我绝对希望避免像第二个选项那样撞到磁盘。如果我对选项 1 有任何运气,我会回来报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2016-12-05
  • 2011-03-26
  • 2010-09-26
相关资源
最近更新 更多