您好我想知道是否有办法检查某个键是否被按下。
以下是情况的一个例子
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 :(得分:7)
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton)
def clickedbutton(self, e):
if wx.GetKeyState(wx.WXK_CONTROL):
print "it works"
答案 1 :(得分:2)
仅使用wx的问题是您需要KeyEvent来访问控制键的实际状态。由于您需要在此类事件之外获取此信息,因此您需要手动跟踪它,并且问题在于很容易错过KeyEvent,因为只有聚焦控件才能获取它们,并且您不能指望它们传播。 / p>
万无一失的方法是利用一些特定于平台的方式来查询这些信息,如果你在windows上查看pyHook或win32api就可以了。
在某些情况下,虽然wx only方法可以工作,但这是你如何做到的:
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()