当 topframe 没有焦点时,如何使用加速键杀死 wxpython 应用程序?
How can I kill a wxpython app with an accelerator key when topframe does not have focus?
[问题]
当 topframe 没有焦点时,我想通过加速键关闭 wxpython 应用程序。
如果 topframe 有焦点并且我按下 'F2' 键然后应用程序关闭,否则什么也不会发生。
[代码]
import wx
app = wx.App(False)
top = wx.Frame(None, title=" test")
def showMsg(event):
wx.MessageBox("test", "ERROR")
def killApp(event):
top.SetFocus()
event.Skip()
top.Destroy()
sizer = wx.GridBagSizer()
RUN_ID = wx.NewId()
top.Bind(wx.EVT_MENU, killApp, id=RUN_ID)
accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F2, RUN_ID ),
])
top.SetAcceleratorTable(accel_tbl)
cancelButton = wx.Button(top, -1, "Cancel", (160,100), size=(45, -1))
sizer.Add(cancelButton,(1,27),(1,1),wx.EXPAND)
top.Bind(wx.EVT_BUTTON, showMsg, cancelButton)
top.SetSizer(sizer)
top.Show(True) # Show the frame.
app.MainLoop()
加速键仅在您的程序中有效。如果某些其他程序(如记事本或 Eclipse)具有焦点,那么它们将接收按键事件而不是您的程序。
如果您试图在关键事件到达应用程序之前拦截它们,那么这通常在 OS 级别上进行处理。通常不推荐这样做,因为它会干扰其他程序的正常行为。
如果您在 Windows,有一个名为 pyhook
的库 (http://sourceforge.net/projects/pyhook/files/pyhook/)
它为 python 进程提供了一个全局挂钩。
我过去将它用于 pyGTK 应用程序,它工作正常,但 pyhook 经常在一段时间后停止工作。所以,它可能不太稳定(或者只是我的代码不好)。和wx混用应该很方便。
[问题] 当 topframe 没有焦点时,我想通过加速键关闭 wxpython 应用程序。 如果 topframe 有焦点并且我按下 'F2' 键然后应用程序关闭,否则什么也不会发生。
[代码]
import wx
app = wx.App(False)
top = wx.Frame(None, title=" test")
def showMsg(event):
wx.MessageBox("test", "ERROR")
def killApp(event):
top.SetFocus()
event.Skip()
top.Destroy()
sizer = wx.GridBagSizer()
RUN_ID = wx.NewId()
top.Bind(wx.EVT_MENU, killApp, id=RUN_ID)
accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F2, RUN_ID ),
])
top.SetAcceleratorTable(accel_tbl)
cancelButton = wx.Button(top, -1, "Cancel", (160,100), size=(45, -1))
sizer.Add(cancelButton,(1,27),(1,1),wx.EXPAND)
top.Bind(wx.EVT_BUTTON, showMsg, cancelButton)
top.SetSizer(sizer)
top.Show(True) # Show the frame.
app.MainLoop()
加速键仅在您的程序中有效。如果某些其他程序(如记事本或 Eclipse)具有焦点,那么它们将接收按键事件而不是您的程序。
如果您试图在关键事件到达应用程序之前拦截它们,那么这通常在 OS 级别上进行处理。通常不推荐这样做,因为它会干扰其他程序的正常行为。
如果您在 Windows,有一个名为 pyhook
的库 (http://sourceforge.net/projects/pyhook/files/pyhook/)
它为 python 进程提供了一个全局挂钩。
我过去将它用于 pyGTK 应用程序,它工作正常,但 pyhook 经常在一段时间后停止工作。所以,它可能不太稳定(或者只是我的代码不好)。和wx混用应该很方便。