钥匙按不使用pyhook的钥匙按事件



好吧,我已经提出了一些代码来检查按下什么键,现在非常基本,但是随着我的进度,我将在此处进行更新,关键是要在任何时候按键关键事件发生

import wx
class Example(wx.Frame):
    def __init__(self, *args,**kw):
        super(Example, self).__init__(*args,**kw)
        self.InitUI()
    def InitUI(self):
        #frame = wx.Frame(self, style=wx.FRAME_DRAWER | wx.STAY_ON_TOP, size = (100, 100))
        #pnl= wx.Panel(frame)
        pnl= wx.Panel(self)    
        pnl.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
        self.st1 = wx.StaticText(self, label='', pos=(30, 10))
        pnl.SetFocus()
        self.SetSize((250,180))
        self.SetTitle('Key Press Event')
        self.Centre()
        self.Show(True)
    def OnKeyDown(self, e):
        key = e.GetKeyCode()
        if  key==wx.WXK_ESCAPE:
            self.st1.SetLabel("ESCAPE")
        elif key ==wx.WXK_CONTROL:
            self.st1.SetLabel("CTRL")
        elif key==wx.WXK_ALT:
            self.st1.SetLabel("ALT")
        elif key==wx.WXK_BACK:
            self.st1.SetLabel("BACKSPACE")
        elif key== wx.WXK_EXECUTE:
            self.st1.SetLabel("ENTER KEY")
def main():
    ex = wx.App()
    Example(None)
    ex.MainLoop()
if __name__=='__main__':
    main()

我正在尝试为此提供无边界的窗口,但是即使我将面板放在style = frame_drawer的框架中,它也无法正常工作,stay_on_top也不可用,因此对这两行进行了评论,请查看您是否可以使其正常工作。。

面板倾向于吃关键事件或将其传递到其他小部件。参见

http://wxpython-users.1045709.n5.n.nabble.com/catching-key-events-from-a-panel-a-panel-a-panel-and-pollom-a-pan------------ and-follow-to-to-packed-to-packed-panels-td2360109.html

链接到旧线程的哪个:http://article.gmane.org/gmane.comp.python.wxpython/50485

引用wxpython的创建者罗宾·邓恩(Robin Dunn):

  • 将关键事件处理程序绑定到所有小部件

  • *捕获EVT_CHILD_FOCUS事件,然后将焦点重置回您的位置希望每当重点变成孩子时。*

  • 使用wx.acceleratortable而不是关键事件,因此击键无论应用程序中哪个小部件都将变成菜单事件焦点。

  • 将您的密钥处理程序绑定到应用程序而不是框架上。全部未经处理的事件在放弃之前将其发送到应用程序对象,因此,如果小部件都没有焦点,则该小部件没有处理关键事件然后,该应用程序将有机会。

您也可能会找到我的有关关键事件启发的旧教程。

相关内容

  • 没有找到相关文章

最新更新