の状況の例です。そのようなイベントの外でこの情報が必要な場合は、手動で追跡する必要があります。問題は、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()
私は答えのいくつかを再読み込みをお勧めしたいです。私が見逃したことがない限り、受け入れられたもの以外のものはクリーナーで持ち運びが容易で、初期のテストでも動作します。 –