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

nur*_*nur 2 macos wxpython

我正在使用wxpython处理osx的应用程序.我想在用户点击窗口关闭按钮时最小化窗口到停靠栏,以便可以从停靠栏恢复它.我怎样才能做到这一点?目前我有恢复窗口的问题,因为它在用户点击关闭按钮时被破坏.我怎么能防止这种情况?

提前致谢

Gar*_*son 5

我这样做的方式是这样的:

__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
Run Code Online (Sandbox Code Playgroud)

您还应该确保在__init__调用中,wx.App.SetMacExitMenuItemId( [ID OF YOUR EXIT MENU ITEM HERE] ) 以便dock上下文菜单中的quit项路由到正确的菜单处理程序.

当窗口关闭时,这会给你一个很好的mac-ish hide.您需要知道应用程序仍在运行,并且可以调用其菜单,因为菜单栏仍位于屏幕顶部.self.Show()菜单事件处理程序的战略调用是您的朋友.

当您的应用程序窗口被隐藏时,您还可以充分利用wx.TaskBarIcon与Dock进行良好的交互(例如,单击dock to reshow window).