2011-12-28 30 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アプリケーションで動作し、正しいようです。私は助けることはできませんが、これが見落とされていないか(あなたの解決策は受け入れられた答えよりも直接的であり、アクセス可能であるかどうか)、あるいは正しい解決策としてこれを排除するいくつかの制限があるかどうかは疑問です。私は投票し、いくつかのテスト/研究を行うつもりです。 –

+0

@ g.d.d.cありがとう、この方法は問題ありません。もう一つの答えは私が答えたときにすでに受け入れられていた、それが理由です。私はいつも良いアイデアを試してみてください。 – GP89

+0

@gddc [docs](http://wxpython.org/docs/api/wx-module.html#GetKeyState)の状態を確認しました。キー(押されているかトグルされている場合はtrue、そうでない場合はfalse)これは一般に、モディファイアまたはトグルキーの状態を取得するのに最も便利です。 **プラットフォームによっては、この機能が検出できる唯一の鍵である可能性があります。**私はどのプラットフォームを参照しているのかわかりませんが、Ctrl、Altなどのキー(修飾キー)は、これに。私はあなたがそれで通常のキーを検出している場合は注意してくださいね。 – GP89

関連する問題