Ваш код работает, если вы используете log.warning.
log.warning("OnKeyDown event %s" % (event))
Уровни ведения журнала:
Level Value
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
UNSET 0
Уровень ведения журнала по умолчанию - ПРЕДУПРЕЖДЕНИЕ. Только журналы с уровнями выше, чем по умолчанию создаются. Таким образом, на уровне по умолчанию (30) ни log.info
, ни log.debug
не дают никакого вывода.
Отредактировано после комментариев OP : установка правильного уровня ведения журнала делает ваш код безупречным на winXP 32bit и win7 64bit с python 2.6 и wxpython 2.8.11 и 2.8.12. Однако код не работает в Ubuntu по какой-то причине, которую я не знаю. Это различие связано с тем, как wxwidgets реализован в разных SO, но не с ведением журнала.
Как вы уже обнаружили, для того, чтобы он работал в Ubuntu, необходимо добавить панель, а также использовать соответствующий уровень ведения журнала. Так что это работает:
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.panel = wx.Panel(self, wx.ID_ANY)
self.Bind(wx.EVT_KEY_DOWN, self.KeyDown)
self.Bind(wx.EVT_KEY_UP, self.KeyDown)
self.Bind(wx.EVT_CHAR, self.KeyDown)
self.panel.SetFocus()
def KeyDown(self, event=None):
logging.warning("OnKeyDown event %s" % (event))
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
gui.Show()
app.MainLoop()