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 回答