我有一个自定义对话框,上面有一些按钮。因为我想保持它很小,所以我希望每个按钮都能做尽可能多的事情,因此,如果在单击按钮时按下 Shift 键,我希望按钮的行为有所不同。根据this在文档页面中,keyevent
有一个 ShiftDown()
函数,如果按下 Shift 键,该函数将返回 true。唯一的问题是我的按钮和处理程序由 wx.EVT_BUTTON
绑定(bind),这是一个没有此类属性的命令事件。有什么方法可以让命令事件携带有关 Shift 键的信息,或者以某种方式将其传递到处理程序中?提前致谢
最佳答案
基本上,您需要绑定(bind)到其他几个事件,特别是 wx.EVT_KEY_DOWN 和 wx.EVT_KEY_UP,以便您知道 Shift 键何时向上或向下。查看以下代码:
import wx
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
self.shift_down = False
btn = wx.Button(self, label="Test Shift")
btn.Bind(wx.EVT_KEY_DOWN, self.onKeyDown)
btn.Bind(wx.EVT_KEY_UP, self.onKeyUp)
btn.Bind(wx.EVT_BUTTON, self.onButton)
#----------------------------------------------------------------------
def onButton(self, event):
"""
Event handler for when the button is pressed
"""
if self.shift_down:
print "Shift key is down!"
else:
print "Shift key is up!"
#----------------------------------------------------------------------
def onKeyDown(self, event):
"""
If shift key is down, set class variable to True
"""
keycode = event.GetKeyCode()
if keycode == wx.WXK_SHIFT:
self.shift_down = True
event.Skip()
#----------------------------------------------------------------------
def onKeyUp(self, event):
"""
If shift key is up, set class variable to False
"""
keycode = event.GetKeyCode()
if keycode == wx.WXK_SHIFT:
self.shift_down = False
event.Skip()
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Demo")
panel = MyPanel(self)
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
在 Windows 7 上使用 Python 2.6.6 和 wxPython 2.8 进行测试
关于python - 如何确定 wxPython 事件处理程序中是否按下了 Shift 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975846/