如何修复 "ctrl+," 的 wxpython menuitem 快捷方式,但标签应显示为 "Ctrl+Comma"

how to fix wxpython menuitem short cut for "ctrl+," but label should display as "Ctrl+Comma"

开发 wxpython 桌面应用程序,这需要一个显示标签为 "SomeXXX\tCtrl+Comma" 的菜单项,当我执行此应用程序并点击 "Ctrl+," 时,它不起作用。

wx.MenuItem(self.tMn,wx.ID_ANY,text="SomeXXX\tCtrl+Comma",kind=wx.ITEM_NORMAL,helpString="SomeXXX") ---此代码标签是正确的,但 Ctrl+ 不起作用。

wx.MenuItem(self.tMn,wx.ID_ANY,text="SomeXXX\tCtrl+,",kind=wx.ITEM_NORMAL,helpString="SomeXXX") --- - 这行代码 Ctrl+,快捷方式有效,但菜单项文本也显示为 "SomeXXX Ctrl+,"

如何将菜单项文本显示为 "SomeXXX Ctrl+Comma" 并且快捷方式应该与 "Ctrl+,"

一起使用

wx.MenuItem(self.tMn,wx.ID_ANY,text="SomeXXX\tCtrl+Comma",kind=wx.ITEM_NORMAL,helpString="SomeXXX")

你需要的是wx.AcceleratorTable。然后你可以按照你想要的方式命名菜单项。这是一个示例(没有菜单):

import wx

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title="Accelerator Tutorial", 
                          size=(500,500))

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        randomId = wx.NewId()
        self.Bind(wx.EVT_MENU, self.onKeyCombo, id=randomId)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord(','), 
                                          randomId )])
        self.SetAcceleratorTable(accel_tbl)

    def onKeyCombo(self, event):
        """"""
        print("You pressed CTRL+COMMA!")

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

这里有几个关于该主题的链接:

Update - 我做了更多的研究,找到了一个只用一个菜单项就能完成的解决方案。您可以调用 SetAccel 并传入加速器使其工作:

import wx

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title="Accelerator Tutorial", 
                          size=(500,500))

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        menubar = wx.MenuBar()
        file_menu = wx.Menu()
        my_id = wx.NewId()
        comma_item = file_menu.Append(my_id, 'Blah\tCtrl+Comma', 
                                      'The comma cmd')
        entry = wx.AcceleratorEntry(wx.ACCEL_CTRL, ord(','), my_id)
        self.Bind(wx.EVT_MENU, self.onKeyCombo, id=my_id)
        comma_item.SetAccel(entry)
        menubar.Append(file_menu, '&File')
        self.SetMenuBar(menubar)

    def onKeyCombo(self, event):
        """"""
        print("You pressed CTRL+COMMA!")

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()