我有这个(我遗漏了与之无关的代码):
class TaskBarIcon(wx.TaskBarIcon):
def __init__(self, frame):
self.frame = frame
super(TaskBarIcon, self).__init__()
def CreatePopupMenu(self):
self.menu = wx.Menu()
self.menu.chk = self.menu.Append(101, 'Show statubar', 'Show Statusbar', kind=wx.ITEM_CHECK)
self.menu.Check(101, True)
self.Bind(wx.EVT_MENU, self.on_tog, id=101)
return self.menu
哪个有效,并且菜单上的检查就在那里。这是Linux中的系统托盘图标,带有右键单击菜单。
但是当我这样做时:
def on_tog(self, event):
self.menu.Check(self.menu.chk.GetId(), False) #Uncheck running box
它没有取消选中。即使我用实际ID 101替换GetID(),它仍然没有取消选中。
我在这里缺少什么?除了我所做的以外,没有太多关于改变这个的文档,但它没有用。
答案 0 :(得分:0)
我使用AppendCheckItem
self.menu.chk = self.menu.AppendCheckItem(101, 'Show statubar', 'Show Statusbar')
其余代码应按预期工作。
<强>更新强>
以下是我的代码的相关部分
MENU_ITEM_ID = wx.NewId()
<强> ... 强>
self.menu_item = self.menu.AppendCheckItem(MENU_ITEM_ID, "Test Menu Item")
<强> ... 强>
self.menu.Bind(wx.EVT_MENU, self.toggle_menuitem, id=MENU_ITEM_ID)
<强> ... 强>
def toggle_menuitem(self, event):
self.menu_item.Check(self.menu_item.IsChecked() == False) # toggle checkmark
更新#2 *
在评论中进行了长时间的讨论后,确定OP将CreatePopupMenu
方法绑定到右键单击事件。这样每次都重新创建了wx.Menu,从而擦除了分配给上一个菜单的任何状态。要解决此问题,只需在父类中创建一个跟踪复选标记值的标记,并在创建弹出菜单后将其设置为正确状态,然后调用self.menu_item.Check(self.is_checked)
。