【问题标题】:Setting icons in a wx.Menu separately to the item IDs将 wx.Menu 中的图标分别设置为项目 ID
【发布时间】:2014-04-14 17:10:41
【问题描述】:

我有一个菜单:

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

我希望两个“打开”菜单项都有 wx.ID_OPEN 图标——但看起来给多个菜单项提供相同的 ID 会混淆事件系统。有没有办法可以将 ID 设置为唯一,但也可以将图标设置为相同?

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

【问题讨论】:

    标签: wxpython wxwidgets


    【解决方案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))
    

    【讨论】:

    • 项目来自一个列表,所以我不能为每个项目预定义不同的打开函数:(在运行时定义,也许...
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多