0

私は 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

4

1 に答える 1

0

問題が何であるかを突き止めました。プロットのスコープはinit関数であるため、 init関数が戻ると非アクティブになります。プロットを次のように定義する必要があります

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

これにより、プロットはキーの押下に反応します。

v923z

于 2012-04-07T10:14:23.967 に答える