matplotlib窗口一直被带到最前面(如何将它们设置在后面?)

时间:2017-05-09 19:52:31

标签: python opencv animation matplotlib

所以我正在玩我从github看到的代码: https://gist.github.com/Uberi/283a13b8a71a46fb4dc8

目标是使用这个实时绘图结构来绘制我从实时图像中检索的一些信息,这不是我的实际工作代码。

当我将这个结构嵌入到我的实际工作代码(包括openCV和一些openCV GUI布局,如Trackbars)时,它阻止我使用这些GUI轨道栏,因为绘图窗口不断弹出,所以我的鼠标不能t按下按钮或在我的实时图像上拖动一个矩形。

我发现的与此主题相关的大多数问题都是试图将窗口放到前面,但实际上我想将绘图窗口设置在后面,这样会让人感到沮丧。

如果你们能给我一些关于这个的暗示,那会很棒。

import time, random
import math
from collections import deque

start = time.time()

class RealtimePlot:
    def __init__(self, axes, max_entries = 100):
        self.axis_x = deque(maxlen=max_entries)
        self.axis_y = deque(maxlen=max_entries)
        self.axes = axes
        self.max_entries = max_entries

        self.lineplot, = axes.plot([], [], "ro")
        self.axes.set_autoscaley_on(True)

    def add(self, x, y):
        self.axis_x.append(x)
        self.axis_y.append(y)
        self.lineplot.set_data(self.axis_x, self.axis_y)
        self.axes.set_xlim(self.axis_x[0], self.axis_x[-1] + 1e-15)
        self.axes.relim(); self.axes.autoscale_view() # rescale the y-axis

    def animate(self, figure, callback, interval = 50):
        import matplotlib.animation as animation
        def wrapper(frame_index):
            self.add(*callback(frame_index))
            self.axes.relim(); self.axes.autoscale_view() # rescale the y-axis
            return self.lineplot
        animation.FuncAnimation(figure, wrapper, interval=interval)

def main():
    from matplotlib import pyplot as plt

    fig, axes = plt.subplots()
    display = RealtimePlot(axes)
    #display.animate(fig, lambda frame_index: (time.time() - start, random.random() * 100))
    plt.show()

    fig, axes = plt.subplots()
    display = RealtimePlot(axes)
    while True:
        display.add(time.time() - start, random.random() * 100)
        plt.pause(0.001)

if __name__ == "__main__": main()

0 个答案:

没有答案