matplotlib FuncAnimation和Gtk Button

时间:2017-01-24 19:42:48

标签: python matplotlib gtk

对于gtk按钮的回调,我遇到了一些意想不到的问题。

我的想法是创建一个笔记本,在其中我有两个使用matplotlib和一个gtk按钮的图来启动动画图。单击gtk按钮时问题就开始了。当我点击回调函数时,但是代码没有运行被调用函数" animate"而且我不知道确切的原因。

在另一种情况下,我称之为#34; animate"在gtk窗口上添加笔记本后动画效果很好。

我想知道的是只有当用户点击gtk按钮时才能启动matplotlib的FuncAnimation。

这是我的代码:

import gtk
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas

def callbackDelay(widget, a, f):
    ani = animation.FuncAnimation(f, a.animate,interval=1000)   

class test:
    def __init__(self):
        global f
        self.p = 3
        f = plt.figure()
        c = f.add_subplot(211)
        b = f.add_subplot(212)
        xInit = range(0,1000,1)
        yInit = [0] * 1000
        self.line = c.plot(xInit, yInit, '-')
        c.axis([0,200,0,500])
        self.line1 = b.plot(xInit, yInit, '-')
        b.axis([0,200,0,500])

    def animate(self,i):
        global canvas
        q = range(0,10+self.p,1)
        w = range(1,11+self.p,1)
        self.line[0].set_data(q,w)
        self.line1[0].set_data(q,w)
        canvas.draw()
        self.p = self.p + 10

win = gtk.Window()
win.connect("destroy", lambda x: gtk.main_quit())
win.set_default_size(200, 200)
win.set_title("Animation plot with GTK")

notebook = gtk.Notebook()
label = gtk.Label("test")

vbox = gtk.VBox(spacing=6)

#Gtk Button
button = gtk.Button()
button.set_label("init")

a = test()
canvas = FigureCanvas(f)  # a gtk.DrawingArea

button.connect("clicked", callbackDelay, a, f)

win.add(notebook)
vbox.pack_start(button)
vbox.pack_start(canvas)
notebook.append_page(vbox, label)
win.show_all()
gtk.main()

1 个答案:

答案 0 :(得分:0)

def callbackDelay

您正在呼叫 a.animate 而没有括号。尝试:

a.animate(10)