有没有一种简单的方法可以捕获Python或wxPython中的所有Frame / Window击键

时间:2011-06-21 05:04:53

标签: python wxpython

我试过了EVT_KEY_DOWN但是没有用。有没有办法捕获任何击键,如F1,F2,ENTER和其他。我正在使用框架和面板。

3 个答案:

答案 0 :(得分:3)

我在对话框子类中使用了EVT_KEY_DOWN。在对话框类的__init__方法中,绑定到EVT_KEY_DOWN:

def __init__(self, ....):
    # ...other init code...
    self.Bind(wx.wx.EVT_KEY_UP, self.handle_key_up)

然后在对话框中提供一个方法,如:

def handle_key_up(self, event):
    keycode = event.GetKeyCode()
    lc = self.list_ctrl_fields

    # handle F2
    if keycode == wx.WXK_F2:
        print "got F2"

(在python 2.6中测试,wxPython 2.8.10。)

答案 1 :(得分:3)

这是什么意思?您需要查看全球加速器。巧合的是,我也在最后一两天看着这个。假设wxpython应用程序窗口具有焦点,则以下内容应在keypress上调用适当的例程。使用我的ubuntu 11.04 / py 2.7.1 / wxpython 2.8

显然,如果需要,您可以合并事件方法。

此主题没有太多内容,但this linkthis link帮助了我(同一网站)

import wx

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Global Keypress")
        self.panel = wx.Panel(self, wx.ID_ANY)
        self.CreateStatusBar()

        # Global accelerators

        id_F1 = wx.NewId()
        id_F2 = wx.NewId()

        self.Bind(wx.EVT_MENU, self.pressed_F1, id=id_F1)
        self.Bind(wx.EVT_MENU, self.pressed_F2, id=id_F2)

        accel_tbl = wx.AcceleratorTable([
            (wx.ACCEL_NORMAL, wx.WXK_F1, id_F1 ),
            (wx.ACCEL_NORMAL, wx.WXK_F2, id_F2 )
        ])
        self.SetAcceleratorTable(accel_tbl)  

    def pressed_F1(self, event):
        print "Pressed F1"
        return True

    def pressed_F2(self, event):
        print "Pressed F2"
        return True

if __name__ == "__main__":
    app = wx.PySimpleApp()
    f = MyFrame().Show()
    app.MainLoop()

答案 2 :(得分:1)