2011-12-28 6 views
2

안녕하세요, 특정 키를 누르고 있는지 확인하는 방법이 있는지 궁금합니다. 여기 wxpython 키가 눌러져 있는지 확인하십시오.

이를위한 WX 당신이 컨트롤 키의 실제 상태에 액세스 할 된 KeyEvent를 필요로한다는 것입니다

self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton) 
def clickedbutton(self, e): 
    if (Control is held down while the button has been clicked): 
     print "it works" 

감사

+0

내가 몇 가지 답변을 다시 읽는 게 좋을 것. 내가 놓친 것을 제외하고, 받아 들여지는 것보다 다른 것 중 하나는 더욱 빨라지고 휴대가 가능하며 초기 테스트에서 작동합니다. –

답변

2

에만 사용의 문제 상황의 예입니다. 이러한 이벤트 외부에서이 정보가 필요하기 때문에 수동으로 추적해야합니다. 문제는 포커스가있는 컨트롤 만 가져오고 전달할 수는 없기 때문에 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() 
+0

아, 고맙다, 내 친구! – thelost

6
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton) 
def clickedbutton(self, e): 
    if wx.GetKeyState(wx.WXK_CONTROL): 
     print "it works" 
+0

이것은 내가 만들고있는 wx apps에서 작동하며 정확합니다. 내가 도울 수 없지만 이것이 간과되지 않는다면 (당신의 솔루션이 수용된 대답보다 훨씬 더 직접적이고 접근 가능한지) 궁금한 점이 있거나 올바른 답을 배제한 어떤 한계가 있다면 어떨까요. 나는 투표를했고, 시험/연구도하려고합니다. –

+0

@ g.d.d.c 안녕하세요,이 방법은 괜찮습니다. 내가 대답 할 때 다른 대답은 이미 받아 들여졌다. 그것이 바로 이유이다. 언제든지 테스트 해 보거나 자유롭게 생각해보십시오. 항상 좋은 생각입니다. :) – GP89

+0

@gddc [docs] (http://wxpython.org/docs/api/wx-module.html#GetKeyState) _ 상태를 확인하십시오. 키 (눌려 지거나 켜진 경우 true, 그렇지 않은 경우 false) 일반적으로 수정 자나 토글 키의 상태를 가져 오는 것이 가장 좋습니다. ** 일부 플랫폼에서는이 기능 만이이 기능이 감지 할 수있는 유일한 키일 수 있습니다 ** ._ 어떤 플랫폼인지는 모르지만 Ctrl, alt 등의 키 (수정 자 키)는 이에. 나는 당신이 그것으로 정규 키를 탐지한다면 조심해야한다. – GP89

관련 문제