你好,我想知道是否有办法检查某个键是否被按下。检查是否按住键,wxpython?
这里的情况为例
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"
感谢
你好,我想知道是否有办法检查某个键是否被按下。检查是否按住键,wxpython?
这里的情况为例
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"
感谢
只使用问题WX这是你需要的KeyEvent访问控制键的实际状态。既然你需要在这样的事件之外的这些信息,你需要手动跟踪它,并且问题在于很容易错过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()
啊我明白了,谢谢你我的朋友! – thelost 2011-12-28 13:49:27
self.button2.Bind(wx.EVT_LEFT_DOWN, self.clickedbutton)
def clickedbutton(self, e):
if wx.GetKeyState(wx.WXK_CONTROL):
print "it works"
这适用于我正在构建的wx应用程序,并且看起来正确。我不禁想知道这是否被忽视(你的解决方案比直接接受的答案更直接,更容易获取),或者在某些地方存在某些限制,将其排除在正确的答案之外。我投了票,并打算做一些测试/研究。 – 2013-01-08 07:14:58
@ g.d.d.c嘿,谢谢你,这种方法很好。我回答时已经接受了另一个答案,这就是为什么。尽管测试尽管/研究虽然,总是一个好主意:) – GP89 2013-01-08 22:27:55
@gddc好吧,刚刚检查了[文档](http://wxpython.org/docs/api/wx-module.html#GetKeyState)_获取状态一个键(如果按下或切换则为真,否则为假)。这通常是最有用的获取修饰键或切换键的状态。 **在某些平台上,这些函数可能是唯一可以检测到的键** ._我不知道它指的是哪个平台,但Ctrl,Alt等键(修饰键)应该工作得很好,对此。如果您使用它检测常规密钥,我想要小心一点。 – GP89 2013-01-08 22:34:08
我建议重读一些答案。除非我错过了一些东西,否则接受的其中一个更清洁,更便携,并在我的早期测试中工作。 – 2013-01-08 07:16:40