Событие фокуса всего окна wxPython - PullRequest
1 голос
/ 22 декабря 2010

С помощью wxPython как вызвать событие всякий раз, когда все окно входит / не в фокус?

Чтобы уточнить, я создаю графический интерфейс последовательного терминала и хотел бы закрыть соединение, когда пользователь не выбрал мое приложение, и повторно открывать соединение, когда пользователь возвращает мое приложение вна переднем плане.Мое приложение - это просто одно окно, полученное из wx.Frame.

Ответы [ 4 ]

5 голосов
/ 23 декабря 2010

Правильный ответ для этого случая - использовать обработчик EVT_ACTIVATE, привязанный к фрейму.Будет событие всякий раз, когда кадр активируется (выводится на передний план относительно других открытых в данный момент окон) или деактивируетсяВы можете использовать метод GetActive объекта события, чтобы сказать, что только что произошло.

2 голосов
/ 22 декабря 2010

Интересная статья на http://www.blog.pythonlibrary.org/2009/08/27/wxpython-learning-to-focus/

Суть этого: wx.EVT_KILL_FOCUS работает нормально, но wx.EVT_SET_FOCUS ведет себя немного странно для любой панели, содержащей виджеты (дочерний set-focus предотвращает set-focus панелисобытие от стрельбы, как ожидалось?)

2 голосов
/ 22 декабря 2010

В дополнение к тому, что говорят эти ребята, вы также можете попробовать EVT_ENTER_WINDOW и EVT_LEAVE_WINDOW.Я думаю, что они запускаются, когда вы перемещаете мышь в виджет кадра и из него, хотя я не думаю, что кадр должен быть в фокусе, чтобы эти события сработали.

@ Хью - спасибо за читателей!

2 голосов
/ 22 декабря 2010

как программист WxPerl, я знаю, что есть

EVT_SET_FOCUS (

EVT_KILL_FOCUS (

), если вы инициализируете это событие, прослушивая кадр как первый параметр, он должен работать как вPerl, так как API почти такой же

...