以下の本のコードをたどろうとしていますが、理解するのに苦労しています。私は誰かが次の問題を明確にするのを手伝ってくれることを望んでいました:
- textctrlに何も含まれていない場合、has_selはfalseに設定されますが、IF stmtはどのように実行されますか?
- event_idとは何ですか?メニューバー全体のevent_idですか?
- txt_ctrlの項目が変更されたときにevent_idが変更されるのはなぜですか?
- event.Enable(has_sel)がtrueの場合、両方のボタンはどのように有効/無効になりますか?
コードは次のとおりです。
import wx
ID_CHECK_ITEM = wx.NewId()
class TextFrame(wx.Frame):
def __init__(self, parent, *args, **kwargs):
super(TextFrame, self).__init__(parent,
*args,
**kwargs)
# Attributes
self.panel = wx.Panel(self)
self.txtctrl = wx.TextCtrl(self.panel,
value="Hello World",
style=wx.TE_MULTILINE)
# Layout
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.txtctrl, 1, wx.EXPAND)
self.panel.SetSizer(sizer)
self.CreateStatusBar() # For output display
# Menu
menub = wx.MenuBar()
editm = wx.Menu()
editm.Append(wx.ID_COPY, "Copy\tCtrl+C")
editm.Append(wx.ID_CUT, "Cut\tCtrl+X")
editm.Append(ID_CHECK_ITEM, "Selection Made?",
kind=wx.ITEM_CHECK)
menub.Append(editm, "Edit")
self.SetMenuBar(menub)
# Event Handlers
self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateEditMenu)
def OnUpdateEditMenu(self, event):
event_id = event.GetId()
sel = self.txtctrl.GetSelection()
print("Start")
print('Sel',sel)
has_sel = sel[0] != sel[1]
print('has_sel=',has_sel)
print('sel[0]=',sel[0])
print('sel[1]=',sel[1])
print('event_id=',event_id)
print('wx.ID_COPY',wx.ID_COPY)
print('wx.ID_CUT=',wx.ID_CUT)
print('ID_CHECK_ITEM=',ID_CHECK_ITEM)
if event_id in (wx.ID_COPY, wx.ID_CUT):
print("Select option set to true-1")
event.Enable(has_sel)
elif event_id == ID_CHECK_ITEM:
print("Select option set to true-2")
event.Check(has_sel)
else:
event.Skip()