2017-03-26 4 views
0

Ich habe mein erstes Problem, wie man FuncAnimation von innerhalb einer Funktion mit Hilfe von this answer aufrufen, gelöst.Wie verweist man auf matplotlib.animation mit tk.button?

Die Antwort war ani zurückzukehren und einen Verweis darauf in dem Code zu halten:

def a(...): 
    # stuff 
    ani = animation.FuncAnimation(...) 
    # more stuff 
    return ani 

outer_ani = a(...) 

In diesem Beispiel wird die Referenz sofort im Code ist, aber ich möchte auf einem, um es nach einem Klick auf Referenz tkinter.Button().

Wie könnte ich dieses Problem lösen? Diese Referenz in eine andere Funktion einfügen und diese mit der Schaltfläche aufrufen, funktioniert nicht.

Danke für Ihre Hilfe!

(Es tut mir leid für meine schrecklichen Englisch und meine dummen und vage Frage, aber ich weiß nicht, wie es deatailed zu beschreiben.)

Edit: Das ist mein (verkürzt, vereinfacht) Code :

root = tk.Tk() 
    def a(): 
     fig = Figure(figsize=(4.1,8.2)) 

     def init(): 
      ax.set_ylim(-50, 50) 
      ax.set_xlim(-50, 50) 
      #more stuff 

     def update(f):   
      y=50-f 
      x=0 
      ln.set_xdata(x) 
      ln.set_ydata(y) 
      return ln, 

     diacan2 = FigureCanvasTkAgg(fig,master=root) 
     diacan2.get_tk_widget().place(x=680,y=20) 
     diacan2.show()   

     ax = fig.add_subplot(2,1,1) 
     bx = fig.add_subplot(2,1,2) 
     x, y = [], [] 
     ln, = ax.plot([], [], 'ro', animated=True) 
     ani = animation.FuncAnimation(fig, update, init_func=init, frames=100, interval=30, blit=True, repeat=False) 

################################################## 

tk.Button(master=root, text="bla", command=a()) 

Antwort

0

Die andere Antwort hielt die Variable als eine globale, die ich nicht zustimmen würde. Ich empfehle Ihnen, die Referenz als Attribut für etwas beizubehalten. Wenn Sie Ihren GUI-Code korrekt entworfen, dann einfach machen es eine Instanzvariable:

def a(...): 
    # stuff 
    self.ani = animation.FuncAnimation(...) 

Andernfalls fügen Sie es als Attribut zu Ihrem tkinter Fenster oder etwas, das so lange, wie das Programm verwendet wird, ausgeführt wird:

def a(...): 
    # stuff 
    root.ani = animation.FuncAnimation(...) 

Ich müsste den Rest Ihres Codes sehen, um Ihnen eine vollständigere Antwort zu geben.

+0

Ich habe Ihren Vorschlag (s) versucht, aber es funktioniert nicht. –

Verwandte Themen