我已经提出了一些代码来检查按键是什么,现在它非常基本,但随着我的进步,我会在这里更新,关键是每当关键事件发生时按下键
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也没有这么说这两行被评论,请看看你是否可以使它工作。 。
答案 0 :(得分:2)
小组倾向于吃掉关键事件或将其传递给其他小部件。参见
指向旧帖子的链接:http://article.gmane.org/gmane.comp.python.wxpython/50485
引用wxPython的创建者Robin Dunn:
将键事件处理程序绑定到所有小部件
*抓住EVT_CHILD_FOCUS事件并将焦点重置回您所在的位置 希望无论什么时候焦点都变成了孩子。*
使用wx.AcceleratorTable而不是键事件,因此按键 无论应用程序中的哪个小部件都将转换为菜单事件 焦点。
将您的密钥处理程序绑定到应用程序而不是框架。所有 未处理的事件在被放弃之前被发送到app对象, 所以哪个小部件都有焦点,如果它没有处理关键事件 然后应用程序将有机会获得它。
您也可能会发现关键事件的旧版tutorial也很有启发性。