[PROBLEM] Я хочу закрыть с помощью ключа акселератора приложение wxpython, когда topframe не имеет фокуса. Если верхняя рамка имеет фокус, и я нажимаю клавишу «F2», приложение закрывается, в противном случае ничего не происходит.Как я могу убить приложение wxpython с помощью ключа ускорителя, когда верхний кадр не имеет фокуса?
[КОД]
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()
Я вижу вашу точку зрения. Вот почему я попытался сфокусироваться на кадре («top.SetFocus()»). Как только topFrame сосредоточится, я думаю, приложение будет уничтожено. – george
Если у вас есть вспомогательное окно приложения с фокусом, то вы должны иметь возможность использовать ускоритель –
@otterb. оценили. модуль pyhook сделал трюк. – george