2

マウスがクリックされたときに、ウィンドウmatplotlib内の図の上にコンテキスト メニューを表示したいと考えています。wxPython

残念ながら、クリックを検出した後、PopupMenuメソッドが呼び出されますが、ポップアップも返されず、表示されません。(これは、Windows 7 ホストを備えた VirtualBox 内の Ubuntu 12.10 のストック Python を使用しています。)

これまでのコードは次のとおりです。私は何が欠けていますか?PopupMenuつまり、実際に表示するにはどうすればよいですか?

import wx
import numpy
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
from wxPython.wx import *

class MatplotlibContext(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'some title')
        self.panel = wx.Panel(self)
        self.fig = Figure()
        self.canvas = FigCanvas(self.panel, -1, self.fig)
        self.axes = self.fig.add_subplot(111)
        x = numpy.linspace(0, 6.28)
        y = numpy.sin(x)
        self.axes.plot(x, y)
        self.canvas.draw()
        self.canvas.mpl_connect('button_press_event', self.context_menu)        
        self.vbox = wx.BoxSizer(wx.VERTICAL)
        self.vbox.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.panel.SetSizer(self.vbox)
        self.vbox.Fit(self)

    def context_menu(self, event):
        print 'in context_menu callback: clicked at (%g, %g)' % (event.x, event.y)
        menu = wxMenu()
        item_id = wxNewId()
        menu.Append(item_id, 'item') 
        wx.EVT_MENU(menu, item_id, self.callback)
        self.PopupMenu(menu, wx.Point(event.x, event.y))
        menu.Destroy()

    def callback(self, event):
        print 'menu selection: %r' % event.GetId()

app = wx.PySimpleApp()
app.frame = MatplotlibContext()
app.frame.Show()
app.MainLoop()

編集 2013-01-31 : コードのタイプミスを修正しました。改訂された質問:

上記のコードは、VirtualBox で Ubuntu 12.10 を実行した 2 つの異なるマシンでも、直接インストールされた 12.04 でも動作しませんが、12.10 を実行している 4 番目のマシンではほとんど動作します。なぜ違いがあるのか​​ わかりません。

そうでなければ、私の質問は今だと思います:

  • 上下座標の問題を修正するにはどうすればよいですか? (ウィンドウの上部から特定の距離をクリックすると、下部からの距離が表示されます。)
  • PopupMenu を開いた場合 (オプションで閉じた場合)、メイン ウィンドウを閉じてもプロセスは終了しません。これを修正するにはどうすればよいですか?

編集 2013-10-02 : バージョン情報

これが機能しないマシンの 1 つで、Python 2.7.4、Matplotlib 1.2.1、および wx 2.8.12.1 で Ubuntu 13.04 を実行しています。

4

1 に答える 1