在Julia中更新图形时,如何在不使绘图窗口抓住焦点的情况下做到这一点?
假设我有以下代码:
using Plots
pyplot()
n = 100
x = collect(range(0, pi, length = n))
for i = 1:30
y = sin.(x) .+ 0.1 * randn(100)
plot(x, y, show=true)
sleep(0)
end
运行时,每次更新绘图时,显示绘图的窗口都会抓住焦点,从而使我无法做任何有用的事情。
如何在不激活窗口的情况下更新绘图?例如,这将用于在后台监视程序。
答案 0 :(得分:1)
简单的解决方案是打开一个空的图形窗口,按照您想要的方式将其布置在桌面上,然后将其重新用于下一个绘图。 Plots.jl
中的默认设置是重复使用同一图形窗口。这是解决方案的外观。
using Plots
pyplot() # or another backend
plot() # this will open the plot window app and steal the focus once
# arrange the window however the way you want, put it in another monitor etc.
for i = 1:30
plot(rand(3,3), show=true, reuse=true) # reuse=true is not necessary since it is already the default
sleep(0.1)
end
由于将再次使用同一应用程序窗口,因此绘图窗口将不再占据焦点。
据我所知,第一个窗口将抢占焦点(我认为这在您的用例中并不是真正的问题),因为它是由另一个应用程序进程创建的。这是大多数桌面环境中的默认行为。某些桌面环境可能允许更改此默认设置。
请注意,您可以在Julia中使用Timer
事件,而不是用for循环来定期更新绘图,这使事情变得更容易并且可能更有效率。