我想知道从Tcl解释器使用invoke matplotlib并绘制到在Tcl端创建的Tk画布是多么困难。
我想知道最好的办法是什么。
我猜我必须创建一个python解释器,将画布句柄从Tcl端传递给python并在两种语言中使用C API。还是有更优雅的方式?
答案 0 :(得分:0)
获得正确的整合并不容易。但是,这就是我在想的:
你可以显然运行Python低于Tcl。根据{{3}},有一个名为 tclpython 的软件包可以为您完成基本的集成工作,this wiki page显示为实时。代码似乎是page linked to,但可能需要一些工作来构建它。 (我从未尝试过。)
您可以在Tkinter窗口上绘制matplotlib,只要您可以使用正确的选项创建该Tkinter窗口,它就会显示出来。关键是可以通过winfo id $nameOfTheWindow
从Tk找到底层系统窗口ID。如果您创建一个框架,-container
选项设置为true(关闭某些内容并打开其他一些内容;您需要明确设置大小),那么该特定框架将适合使用在python / matplotlib端使用TkAgg。关键是要在-use
选项设置为从winfo id
检索到的ID的那一侧进行顶层调整。您可能需要确保python端在一个单独的线程中运行其渲染到外部Tcl / Tk以使事件处理正常工作(除非您热衷于进行深度事件循环黑客攻击;情况是这样的你实际上
如果这不起作用,请将matplotlib渲染为图像(GIF或PNG;如果您已经获得Tk 8.6,则优先选择后者),因为您可以通过照片图像轻松显示。如果没有线程游戏,这肯定是可能的;它只是传递纯数据。可能比较慢而且没有交互性,但这可能对你正在做的事情无关紧要,而且在简单的情况下更容易。
如果你在Windows或OSX上,你可能需要第二种方法,因为Tk并没有真正使用X11。 (当然,除非您使用其中一个更不正常的配置选项。)