2012-04-04 28 views
0

Ich möchte ein Plot-Fenster mit einigen Tkinter-Tasten behandeln. Wie zum Beispiel Plot-Matrix-Spalten und Switch-Spalten mit Schaltflächen. Ich habe dies versucht:Handle Plot mit Tkinter

import numpy 
import pylab 
import Tkinter 

pylab.ion() 
# Functions definitions: 
x = numpy.arange(0.0,3.0,0.01) 
y = numpy.sin(2*numpy.pi*x) 
Y = numpy.vstack((y,y/2,y/3,y/4)) 

#Usual plot depending on a parameter n: 
def graphic_plot(n): 
    if n < 0: n = 0 
    if n > len(Y): n = len(Y)-1 
    fig = pylab.figure(figsize=(8,5)) 
    ax = fig.add_subplot(111) 
    ax.plot(x,Y[n,:],'x',markersize=2) 
    ax.set_xlabel('x title') 
    ax.set_ylabel('y title') 
    ax.set_xlim(0.0,3.0) 
    ax.set_ylim(-1.0,1.0) 
    ax.grid(True) 
    pylab.show() 


def increase(n): 
    return n+1 

def decrease(n): 
    return n-1 

n=0 
master = Tkinter.Tk() 
left_button = Tkinter.Button(master,text="<",command=decrease(n)) 
left_button.pack(side="left") 
right_button = Tkinter.Button(master,text=">",command=increase(n)) 
right_button.pack(side="left") 
master.mainloop() 

Aber ich dont't wissen, wann die graphic_plot Funktion aufzurufen und die Grafik entsprechend dem n Parameter aktualisieren.

Antwort

1

Zunächst müssen Sie pass a function zu den command Parameter in Schaltflächen. In diesem Code

left_button = Tkinter.Button(master, text="<", command=decrease(n)) 

Sie verteilen decrease(0) oder -1, zu command.


Andere Probleme:

  • können wir nicht nur in decrease passieren, weil es einen Parameter nimmt
  • n ‚s Zustand ist nie
  • die Handlung geändert sollte aktualisiert werden, wenn n ist inced/deced

Wir können diese Probleme leicht lösen ems von n in eine Klasse mit ein paar Methoden zu bewegen:

class SimpleModel: 

    def __init__(self): 
    self.n = 0 

    def increment(self): 
    self.n += 1 
    graphic_plot(self.n) 

    def decrement(self): 
    self.n -= 1 
    graphic_plot(self.n) 

Dann für die Schaltflächen, wir haben:

model = SimpleModel() # create a model 

left_button = Tkinter.Button(master, text="<", command=model.decrease) 

right_button = Tkinter.Button(master, text=">", command=model.increase)