2017-01-24 9 views
0

gtkボタンのコールバックに予期せぬ問題があります。matplotlib FuncAnimationとGtkの問題

アイデアはノートブックを作成し、その中にmatplotlibとgtkボタンを使ってアニメーションプロットを開始する2つのプロットがあります。問題は、gtkボタンをクリックしたときに始まりました。私がクリックすると、コールバック関数が呼び出されましたが、コードは呼び出された関数を "アニメート"しませんでした。私は正確な理由はわかりません。

別の状況では、ノートブックがgtkウィンドウに追加され、アニメーションが完全に機能した後に関数「アニメート」を呼び出します。

私が望むのは、ユーザーがgtkボタンをクリックしたときにのみmatplotlibのFuncAnimationを起動する方法を知ることです。ここで

は私のコードです:

def callbackDelay 

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

あなたは括弧なしa.animateを呼んでいます。試してください:

a.animate(10) 
関連する問題