Я пытаюсь использовать таблицу ускорителей, чтобы поймать нажатие клавиши глобально в окне, чтобы я мог запустить метод в ответ. Однако таблица ускорителей, по-видимому, уничтожает событие, которое иначе было бы создано, нажав клавишу, не позволяя мне вводить текст в текстовые элементы управления. Есть ли способ обойти это поведение или какое-то другое решение моей проблемы?
Изменение: Здесь лучший пример такой ситуации:
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(-1,-1))
...
randomId = wx.NewId()
parent.Bind(wx.EVT_MENU, self.onKey, id=randomId)
accTable = wx.AcceleratorTable([(wx.ACCEL_NORMAL, 96, randomId)]) # 96 is the keycode for '
self.SetAcceleratorTable(accTable)
...
class ctrlpanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
...
grid = wx.GridBagSizer(hgap=7, vgap=7)
self.lblfreq = wx.StaticText(self, label="Base Frequency (hz): ")
grid.Add(self.lblfreq, pos=(0,0))
self.freq = wx.TextCtrl(self, value="0", size=(100, 20))
grid.Add(self.freq, pos=(0,1))
self.waveList = ['Sine', 'Semicircle', 'Saw', 'Square']
self.lblwave = wx.StaticText(self, label="Wave Shape: ")
grid.Add(self.lblwave, pos=(1,0))
self.wave = wx.Choice(self, choices=self.waveList)
self.wave.SetStringSelection('Sine')
grid.Add(self.wave, pos=(1,1))
self.SetSizerAndFit(grid)
С помощью этого кода таблица ускорителей работает отлично, подбирая мое нажатие клавиш, где бы фокус находился в окне, и активирование метода onKey. Однако, когда основное внимание уделяется текстовому управлению, я не могу ввести символ, который я собираю в текстовом элементе управления, потому что таблица ускорителей обрабатывает это событие до того, как оно отправится в другое место, или предотвратит запуск обычного события или размножаться. Я хочу иметь возможность сделать событие по-прежнему нормально, поэтому текст будет отображаться в текстовом элементе при вводе, даже если эти клавиши настроены на выполнение некоторых других действий, как правило, в окне. Есть ли какая-нибудь вещь event.Skip(), которую я мог бы использовать здесь?
Трудно сказать, в чем проблема, без дополнительной информации, такой как ОС, wx-версия или небольшой пример, который показывает проблему. Однако, вот пара примеров статей по этому вопросу, которые могут помочь вам разобраться в проблеме:
http://www.blog.pythonlibrary.org/2008/07/02/wxpython-working-with-menus-toolbars-and-accelerators/
http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/