如何修复 "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()
这里有几个关于该主题的链接:
- https://docs.wxpython.org/wx.AcceleratorTable.html
- wxPython: All About Accelerators
- wxPython: Keyboard Shortcuts (Accelerators)
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()
开发 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()
这里有几个关于该主题的链接:
- https://docs.wxpython.org/wx.AcceleratorTable.html
- wxPython: All About Accelerators
- wxPython: Keyboard Shortcuts (Accelerators)
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()