如何在python中结合Cmd和Matplotlib

我想结合使用Matplotlib中的交互式绘图和python中的命令行界面Cmd.我怎样才能做到这一点?
我可以使用线程吗?我尝试了以下方法:

from cmd import Cmd
import matplotlib.pylab as plt
from threading import Thread

class MyCmd(Cmd):

    def __init__(self):
        Cmd.__init__(self)
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(1,1,1)

    def do_foo(self, arg):
        self.ax.plot(range(10))
        self.fig.canvas.draw()

if __name__=='__main__':
    c = MyCmd()
    Thread(target=c.cmdloop).start()
    plt.show()

它打开一个图形窗口,我可以在控制台中键入实际执行的命令.当执行“ foo”命令时,它将在图形窗口中绘制.到目前为止,一切正常.但是,当我重新进入控制台时,控制台似乎卡住了,现在有了新的命令窗口.但是,当我单击进入图形窗口时,控制台将输出一个新的命令提示符,并且我可以输入一个新命令.
看来这两个循环并没有真正交织在一起.有没有更好,更常见的方法?

解决方法:

我发现了一些可行的方法,但是很难看

from cmd import Cmd
import matplotlib.pylab as plt
from threading import Thread
import time

class MyCmd(Cmd):

    def __init__(self):
        Cmd.__init__(self)
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(1,1,1)

    def do_foo(self, arg):
        self.ax.plot(range(10))
        self.fig.canvas.draw()

if __name__=='__main__':
    plt.ion()
    c = MyCmd()
    def loop():
        while True:
            c.fig.canvas.draw()
            time.sleep(0.1)
    Thread(target=loop).start()
    c.cmdloop()

这只是周期性地调用图形的draw方法.如果我不这样做,则该图被遮挡并再次出现在最前面时,该图不会重绘.

但这看起来很丑.有没有更好的办法?

上一篇:ENVI中对图像监督分类结果的编辑


下一篇:PowerManagerService第四讲之亮屏