как исправить ярлык пункта меню wxpython для "Ctrl +", но метка должна отображаться как "Ctrl + Запятая" - PullRequest
0 голосов
/ 04 января 2019

разработка настольного приложения 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, текст = "SomeXXX \ tCtrl + Comma", вид = wx.ITEM_NORMAL, helpString = "SomeXXX")

1 Ответ

0 голосов
/ 05 января 2019

Что вам нужно, это 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()

А вот пара ссылок по теме:

Обновление - Я провел немного больше исследований и нашел решение для этого с помощью всего лишь пункта меню. Вы можете позвонить 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()
...