【问题标题】:matplotlib gui respond to axes changesmatplotlib gui 响应轴的变化
【发布时间】:2014-11-07 12:14:40
【问题描述】:

我用 QT 创建了一个小 GUI,它设置了一个 matplotlib figureaxes。 GUI 有控件可以更改与axes 的外观有关的所有内容。

基本上,它通过每个小部件将信号发送回主框架并在axesfigure 对象上调用适当的matplotlib setters 来实现这一点。

但是,axes(以及FigureCanvas 上显示的图像)可能会在没有来自 GUI 的输入的情况下更改(例如,在自动缩放时,或添加某些自动调整轴的图时)。 在这种情况下,一个小部件控制例如x 轴的限制现在将显示错误的值。

我希望在轴更新时更新所有相关的小部件......我怎样才能做到这一点?

我在想这是一个之前已经解决的问题——如何实现不同对象之间的双向通信?

【问题讨论】:

  • 这实际上是一项复杂的工作——你确定你必须以一种可以自动调整的方式做事吗?即,也许不是以自动方式添加子图,您可以自己修改/设置轴大小并相应地更新小部件。
  • 问题是当你调用一个 matplotlib 例程来创建一个新的图(例如axes.pie)时,matplotlib 将自己调整轴,所以任何控制轴的小部件现在都不同步...要始终手动控制将需要重写 matplotlib 的很大一部分,我宁愿避免..
  • 确实,如果操作足够简单,我想这只是一个想法。我唯一的另一个想法可能是一个“更新程序”方法,它进入您的绘图层次结构并访问各种 getter 以获得更新小部件的正确值?这样你就可以在任何情节调用之后调用它。
  • 我认为您正在尝试重新发明模型-视图-控制器
  • @tcaswell。根本不想重新发明。尝试看看 matplotlib 如何适应 mvc(如果这是这样做的必要条件),如果有的话。

标签: python qt user-interface matplotlib axes


【解决方案1】:
fig.canvas.draw() 
time.sleep(1e-2)

每当有任何东西写入情节时?但是没有代码很难提供帮助。 展示一个代码不工作的例子会有很大帮助。

编辑

然后我会再试一次: 如何获取您正在更新的情节的状态?我猜这是@Ajean 的更新方法的意思。我知道 matplotlib 中的 Artists 有一个 Artist.properties() 方法,它返回所有的属性和值。

我想 Axes 会有类似的方法。

快速浏览一下 matplotlib 文档,我们发现了 2 个有趣的坐标轴方法: ax.get_autoscale_on()ax.set_autoscale_on()

ax.set_autoscale_on(False) 将阻止绘图更新坐标区的状态。

【讨论】:

  • 你误解了这个问题。让画布更新没有问题。我希望用户用来控制轴的小部件使用相关参数进行更新。这些小部件可能是例如控制坐标轴网格线颜色
  • 再一次,这里的信息很少......我假设你熟悉updatesEnabled......qt-project.org/doc/qt-4.8/qwidget.html
  • 另外,只添加了一个答案,因为我不能对问题发表评论,还没有代表,你的 -1 没有帮助:P
  • @nico 无法对问题发表评论不是发布答案的好理由。
  • @Ajean 首先,很抱歉尝试(但这是讽刺)。其次:无法要求澄清我已尽我所能,即按照理解的方式回答问题(这显然是我理解不力的公然证明,我会告诉你的)。我实际上不同意您的观点,并说没有充分的理由不发布答案(无需强调,我假设您可以阅读)。但是,如果不尝试,您会擅长它吗?我相信这就是编辑功能的用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2016-03-04
  • 2018-02-10
  • 1970-01-01
  • 2019-12-03
  • 2019-07-01
  • 2016-11-27
相关资源
最近更新 更多