将wx.Menu中的图标分别设置为项目ID

时间:2014-04-14 17:10:42

标签: wxpython wxwidgets

我有一个菜单:

Projects
  |-Project A
  |   |- Open
  |   |- Run
  |   \- Close
  \-Project B
      |- Open
      |- Run
      \- Close

我想要" Open"菜单项有wx.ID_OPEN图标 - 但它看起来像给多个菜单条目相同的ID会混淆事件系统。有没有办法可以将ID设置为唯一,还可以将图标设置为相同?

(问题标记为wxpython,因为这是我正在使用的内容,但我想这可能不是特定于语言的?)

2 个答案:

答案 0 :(得分:1)

使用相同的ID但以不同方式绑定事件,这应该可以解决这个问题。

pa_open = wx.MenuItem(pa_menu, wx.ID_OPEN, "Open", "", wx.ITEM_NORMAL)
pb_open = wx.MenuItem(pb_menu, wx.ID_OPEN, "Open", "", wx.ITEM_NORMAL)

pa_open.Bind(wx.EVT_MENU, self.onOpenProjectA)
pb_open.Bind(wx.EVT_MENU, self.onOpenProjectB)

或者,如果它只是您想要的相同图标,您可以将每个菜单项设置为wx.ID_ANY并使用ArtProvider设置您的图标。例如:

pa_open.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_OPEN))
pb_open.SetBitmap(wx.ArtProvider.GetBitmap(wx.ART_OPEN))

答案 1 :(得分:0)

我会找到一个打开的图标,并通过其SetBitmap()方法设置每个菜单项以使用该位图。这样的事情应该有效:

img = wx.Image(img_filepath, wx.BITMAP_TYPE_ANY)
myMenuItem.SetBitmap(wx.BitmapFromImage(img))

确保获得正确尺寸的图像(例如10x10)。