对于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()
答案 0 :(得分:0)
在
def callbackDelay
您正在呼叫 a.animate 而没有括号。尝试:
a.animate(10)