在matplotlib + gtk中连接信号

时间:2012-04-06 22:50:52

标签: events gtk matplotlib

我正在用gtk开发一个matplotlib应用程序,我想在python类中抽象绘图相关的东西,但与此同时,我也希望能够通过击键与图形交互。我的班级定义如下:

class Plot:
    def __init__(self, data, datatype, xlabel=None, ylabel=None, xtics=None, ytics=None):
        self.figure = Figure(figsize=(8,6), dpi=72)
        self.axis = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(self.figure)
        self.figure.canvas.mpl_connect('key_press_event', self.on_key)

    def on_key(self, event):
        print 'pressed'

然后我在主窗口中放下这个:

x = numpy.linspace(0, 10, 100)
y = numpy.sin(x)
plot = Plot([x,y], 'line', 'xlabel', 'ylabel')
vbox.pack_start(plot.plotbox)

其中vbox只是一个gtkbox。现在,情节显示正确,但我无法与它交互,即,当我按下一个键时,我无法进入on_key函数。 有人能指出缺少什么吗?

非常感谢,

v923z

1 个答案:

答案 0 :(得分:0)

我弄清楚问题是什么:plot的范围是 init 函数,因此一旦 init 函数返回它就会变为非活动状态。必须将图定义为

self.plot = Plot([x,y], 'line', 'xlabel', 'ylabel')
vbox.pack_start(self.plot.plotbox)

有了这个,情节会对按键做出反应。

v923z