Как отключить кнопку закрытия окна в OSX с помощью wxpython? - PullRequest
2 голосов
/ 28 июня 2009

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

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 28 июня 2009

То, как я это делаю, выглядит так:

В методе __init__ установите обработчики для события wx.EVT_CLOSE и пункт меню, который является вашей "реальной" опцией выхода. Вам это нужно, или вы никогда не сможете закрыть свою программу.

def OnClose(self,evt):
  #Turn closes into hides unless this is a quit application message / or OS shutting down
  if evt.CanVeto():
    self.Hide()
    evt.Veto()
  else:
      #if we don't veto it we allow the event to propogate
      evt.Skip() 

def OnMenuExit(self,evt):
  #Event handler for exit menu item
  self.Close(force=True)  #Stops the close handler vetoing it

Вы также должны убедиться, что в __init__ вы вызываете wx.App.SetMacExitMenuItemId( [ID OF YOUR EXIT MENU ITEM HERE] ), чтобы пункт выхода в контекстном меню вашего док-станции перенаправлялся на ваш правильный обработчик меню.

Это дает вам хорошую скрытность, когда окно закрыто. Вы должны знать, что приложение все еще работает и его меню можно вызвать, так как строка меню все еще находится в верхней части экрана. Ваши друзья здесь - стратегические вызовы self.Show() в обработчиках событий меню.

Вы также можете эффективно использовать wx.TaskBarIcon для удобного взаимодействия с док-станцией, когда окно вашего приложения скрыто (например, нажмите на док-станцию, чтобы переоткрыть окно).

0 голосов
/ 28 июня 2009

Разве вы не можете просто связать событие EVT_CLOSE и свернуть вместо закрытия, используя ваш обработчик для EVT_ICONIZE

...
def __init__(self):
  ...
  self.Bind(wx.EVT_CLOSE, self.onCloseWindow)
  ...
def onCloseWindow(self, event):
  ... do something else instead of closing ...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...