2016-01-10 2 views
0

[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() 

ответ

1

Если вы находитесь в Windows, есть библиотека под названием pyhook (http://sourceforge.net/projects/pyhook/files/pyhook/) , которая предоставляет глобальный крючок для процесса python.

Я использовал его в прошлом для приложения pyGTK, и он работал нормально, но, как правило, пыхтя перестает работать через некоторое время. Таким образом, это может быть не так стабильно (или просто мой код был плохим). Его следует легко смешивать с wx.

0

ключи Accelerator будет работать только в вашей программе. Если в какой-то другой программе, например Notepad или Eclipse, есть фокус, тогда они будут получать ключевые события вместо вашей программы.

Если вы пытаетесь перехватить ключевые события до того, как они достигнут приложения, тогда это обычно обрабатывается на уровне ОС. Обычно это не рекомендуется, так как это может помешать нормальному поведению других программ.

+0

Я вижу вашу точку зрения. Вот почему я попытался сфокусироваться на кадре («top.SetFocus()»). Как только topFrame сосредоточится, я думаю, приложение будет уничтожено. – george

+0

Если у вас есть вспомогательное окно приложения с фокусом, то вы должны иметь возможность использовать ускоритель –

+0

@otterb. оценили. модуль pyhook сделал трюк. – george

 Смежные вопросы

  • Нет связанных вопросов^_^