Macos 如何使用wxpython禁用OSX中的窗口关闭按钮?

Macos 如何使用wxpython禁用OSX中的窗口关闭按钮?,macos,wxpython,Macos,Wxpython,我正在使用wxpython为osx开发一个应用程序。我想在用户单击窗口关闭按钮时最小化从窗口到dockbar的切换,以便可以从dockbar恢复。我该怎么做?目前,我在恢复窗口时遇到问题,因为当用户单击关闭按钮时,窗口会被破坏。我怎样才能防止呢 提前感谢您不能只绑定事件EVT\u CLOSE并使用处理程序EVT\u ICONIZE最小化而不是关闭吗 ... def __init__(self): ... self.Bind(wx.EVT_CLOSE, self.onCloseWindow

我正在使用wxpython为osx开发一个应用程序。我想在用户单击窗口关闭按钮时最小化从窗口到dockbar的切换,以便可以从dockbar恢复。我该怎么做?目前,我在恢复窗口时遇到问题,因为当用户单击关闭按钮时,窗口会被破坏。我怎样才能防止呢


提前感谢

您不能只绑定事件
EVT\u CLOSE
并使用处理程序
EVT\u ICONIZE
最小化而不是关闭吗

...
def __init__(self):
  ...
  self.Bind(wx.EVT_CLOSE, self.onCloseWindow)
  ...
def onCloseWindow(self, event):
  ... do something else instead of closing ...
...

我是这样做的:

\uuuu init\uuuu
方法中,设置
wx.EVT\u 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
您还应该确保在
\uuuu init\uuuu
中调用
wx.App.SetMacExitMenuItemId([此处退出菜单项的ID])
,以便dock上下文菜单中的退出项路由到正确的菜单处理程序

当窗口关闭时,这会给你一个很好的mac风格的隐藏。你需要知道应用程序仍然在运行,并且它的菜单可以被调用,因为菜单栏仍然在屏幕的顶部。对菜单中的
self.Show()
事件处理程序的战略性调用是您的朋友

当你的应用程序窗口被隐藏时,你也可以很好地利用wx.TaskBarIcon与dock进行良好的交互(例如,单击dock以重新显示窗口)