에만 사용의 문제 상황의 예입니다. 이러한 이벤트 외부에서이 정보가 필요하기 때문에 수동으로 추적해야합니다. 문제는 포커스가있는 컨트롤 만 가져오고 전달할 수는 없기 때문에 KeyEvent를 놓치기 쉽다는 것입니다.
Windows에서 pyHook 또는 win32api를 검색하는 경우이 정보를 쿼리하는 특정 플랫폼 방식을 사용하는 것이 가장 간단한 방법입니다. WX 유일한 방법은 여기서 일 수 있지만 어떤 경우에는
당신이 그것을하는 방법이다 :
import wx
class Example(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
btn = wx.Button(self, label="press me")
self.Sizer = wx.BoxSizer()
self.Sizer.Add(btn)
self.ctrl_down = False
self.Bind(wx.EVT_KEY_UP, self.OnUpdateCtrlState)
self.Bind(wx.EVT_KEY_DOWN, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_KEY_UP, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_KEY_DOWN, self.OnUpdateCtrlState)
btn.Bind(wx.EVT_BUTTON, self.OnButton)
def OnUpdateCtrlState(self, event):
self.ctrl_down = event.ControlDown()
print self.ctrl_down
event.Skip()
def OnButton(self, event):
if self.ctrl_down:
wx.MessageBox("control down")
app = wx.App(False)
app.TopWindow = f = Example()
f.Show()
app.MainLoop()
내가 몇 가지 답변을 다시 읽는 게 좋을 것. 내가 놓친 것을 제외하고, 받아 들여지는 것보다 다른 것 중 하나는 더욱 빨라지고 휴대가 가능하며 초기 테스트에서 작동합니다. –