检查按键是否按下,wxpython?

时间:2011-12-28 03:17:49

标签: 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"

由于

2 个答案:

答案 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()