【发布时间】:2017-08-17 07:32:05
【问题描述】:
今天我将 matplotlib 升级到 2.0.2 版,可能有 3 年没有升级了。
现在我遇到的问题是,在交互式绘图中,窗口总是在前面,好像这里 make matplotlib plotting window pop up as the active one 已经成为默认行为。
如何停用它?我不希望窗口每 5 秒出现一次,然后在我的文本编辑器、浏览器、...
我希望它保持在我放置它的 z 顺序中,无论是在活动窗口的前面还是后面。
我认为 2016 年 1 月 31 日的以下提交是造成这种问题行为的原因:tkagg: raise each new window; partially addresses #596
在Github上找到了相关评论https://github.com/matplotlib/matplotlib/issues/596#issuecomment-305298577
看来是我对plt.pause 的调用导致了此问题,而不是plt.plot 调用。
【问题讨论】:
-
我认为如果您在窗口中发出命令执行某些操作,您希望窗口位于顶部是很自然的。虽然它不会窃取焦点(这确实很烦人)。如果您认为 matplotlib 窗口更像是一个应用程序,应该简单地留在原处,无论里面发生什么(可能就像一个视频播放器,即使最小化也会继续播放电影),您可能想要这样做:创建一个独立申请。如果您更新您的问题以显示实际问题(或者更确切地说是minimal reproducible example),可能会帮助您这样做。
-
@ImportanceOfBeingErnest 问题在于
plt.pause()。它执行类似于time.sleep()的操作,但不会阻塞用户界面,即您可以拖动窗口并调整其大小。使用plt.show()完全可以理解将窗口完全带到前面,但是plt.pause()?具有进入操作系统友好的空闲状态功能的命令没有理由对窗口管理执行任何操作,例如在浏览器前移动窗口。我通过使用matplotlib.animation解决了这个问题,但是这个“功能”严重破坏了plt.pause()功能。 -
plt.pause做了三个主要的事情。 (1) 它重绘画布。 (2) 它调用plt.show(3) 它启动事件队列。因此,如果show使窗口位于前面是有效的,那么它肯定也适用于任何调用show的命令。但是,我不确定这个问题实际上是关于什么的。是对某些功能的抱怨吗?您需要帮助吗? -
@ImportanceOfBeingErnest 这是一个问题。我不知道这种行为是从哪里来的。我不只是等待我更深入地搜索的答案,而是认为这没问题。浮出水面的信息被添加到问题中。我认为这也可以。是的,
plt.pause()调用plt.show(),但是让它以这种方式行事是一种回归。我不再需要这个问题的帮助。您是要我删除它,还是留给可能遇到相同问题的其他人? -
您找到了适合您的解决方案这一事实以某种方式告诉我们,此问题可能存在解决方法。因此,它也可能对其他人有帮助,您可以用它来回答您自己的问题。我还添加了另一种解决方法,以防更改后端是一种选择。
标签: python windows matplotlib plot