0

いくつかの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()

しかし、いつgraphic_plot関数を呼び出して、nパラメーターに対応してグラフィックを更新するかはわかりません。

4

1 に答える 1

1

まず、ボタンのパラメーターに関数を渡す必要があります。commandこのコードでは、

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

decrease(0)、または -1 を に渡していますcommand


その他の問題:

  • decreaseパラメータを取るため、単に渡すことはできません
  • nの状態は変更されません
  • プロットnは inced/decedのたびに更新する必要があります

nこれらの問題は、いくつかのメソッドを持つクラスに移動することで簡単に解決できます。

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)

次に、ボタンについては、次のようになります。

model = SimpleModel()  # create a model

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

right_button = Tkinter.Button(master, text=">", command=model.increase)
于 2012-04-04T12:34:35.770 に答える