ユーザーが右クリックすると表示されるポップアップメニューのグラフがあります。サブオプションAはデフォルトでチェックされています。ユーザーがさまざまな動作に対してこのチェックマークを切り替えられるようにしたいと思います。そこで、Aがすでにチェックされているかどうかを知りたいのですが、これを独自の機能で処理してほしいと思います。メニューshowPopupMenu()を作成する関数と、A commandA()のチェックステータスを知る必要がある関数を呼び出しましょう。
現在、デフォルトでAをチェックし、AのIsChecked()ステータスを出力すると、showPopupMenu()では値がTrueになり、commandA()では値がfalseになります。デフォルトでAがチェックされていない場合、回答は反転されます。showPopupMenu()はチェックステータスをfalseとして表示し、commandA()はそれをtrueとして表示します。これにより、commandA()のIsChecked()ステータスは、showPopupMenu()のIsChecked()ステータスの逆であるように見えます。どうしてこれなの?
import wxversion
wxversion.ensureMinimal('2.8')
from numpy import arange, sin, pi
import matplotlib
matplotlib.use('WX')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.figure import Figure
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,-1,
'Example Frame',size=(550,350))
self.SetBackgroundColour(wx.NamedColor("WHITE"))
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
self.axes.plot(t,s)
self.canvas = FigureCanvas(self, -1, self.figure)
self.canvas.Bind(wx.EVT_RIGHT_DOWN,
self.showPopupMenu)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
def showPopupMenu(self, event):
if not hasattr(self, "popupTwo"):
self.popupOne = wx.NewId()
self.popupTwo = wx.NewId()
self.popupThree = wx.NewId()
self.popupA = wx.NewId()
self.popupB = wx.NewId()
self.popupOne = wx.Menu()
my_a = self.popupOne.Append(self.popupA, "A", kind=wx.ITEM_CHECK)
self.popupOne.Append(self.popupB, "B")
self.popupOne.Check(self.popupA, True)
#self.popupOne.Check(self.popupA, False)
print "in showPopupMenu(): ",self.popupOne.IsChecked(self.popupA)
self.Bind(wx.EVT_MENU, self.commandA, my_a)
menu = wx.Menu()
menu.AppendMenu(-1, 'One', self.popupOne)
menu.Append(self.popupTwo, "Two")
menu.Append(self.popupThree, "Three")
self.PopupMenu(menu)
menu.Destroy()
def commandA(self, event):
print "in commandA(): ", self.popupOne.IsChecked(self.popupA)
# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()
このスクリプトの出力:
showPopupMenu()の場合:True
commandA()の場合:False