【发布时间】:2014-11-07 12:14:40
【问题描述】:
我用 QT 创建了一个小 GUI,它设置了一个 matplotlib figure 和 axes。
GUI 有控件可以更改与axes 的外观有关的所有内容。
基本上,它通过每个小部件将信号发送回主框架并在axes 和figure 对象上调用适当的matplotlib setters 来实现这一点。
但是,axes(以及FigureCanvas 上显示的图像)可能会在没有来自 GUI 的输入的情况下更改(例如,在自动缩放时,或添加某些自动调整轴的图时)。
在这种情况下,一个小部件控制例如x 轴的限制现在将显示错误的值。
我希望在轴更新时更新所有相关的小部件......我怎样才能做到这一点?
我在想这是一个之前已经解决的问题——如何实现不同对象之间的双向通信?
【问题讨论】:
-
这实际上是一项复杂的工作——你确定你必须以一种可以自动调整的方式做事吗?即,也许不是以自动方式添加子图,您可以自己修改/设置轴大小并相应地更新小部件。
-
问题是当你调用一个 matplotlib 例程来创建一个新的图(例如
axes.pie)时,matplotlib 将自己调整轴,所以任何控制轴的小部件现在都不同步...要始终手动控制将需要重写 matplotlib 的很大一部分,我宁愿避免.. -
确实,如果操作足够简单,我想这只是一个想法。我唯一的另一个想法可能是一个“更新程序”方法,它进入您的绘图层次结构并访问各种 getter 以获得更新小部件的正确值?这样你就可以在任何情节调用之后调用它。
-
我认为您正在尝试重新发明模型-视图-控制器
-
@tcaswell。根本不想重新发明。尝试看看 matplotlib 如何适应 mvc(如果这是这样做的必要条件),如果有的话。
标签: python qt user-interface matplotlib axes