Introduction
This brief recipe shows how to ensure your window is completely on-screen, with multiple monitor support.
You could either make your frame a subclass of this utility class, or copy the EnsureOnScreen method into your own Frame subclass.
Code Sample
import wx class MyFrame(wx.Frame): """ Provides a utility method that keeps the window on-screen """ def EnsureOnScreen(self): """ Move the window onscreen, if it's not already. """ try: myDisplayIdx = wx.Display.GetFromWindow(self) except NotImplementedError: myDisplayIdx = 0 if myDisplayIdx == -1: myDisplayIdx = 0 display = wx.Display(myDisplayIdx) geometry = display.GetGeometry() myPos = self.GetPosition() if myPos.x < geometry.x: myPos.x = geometry.x if myPos.y < geometry.y: myPos.y = geometry.y mySize = self.GetSize() if mySize.width > geometry.width: mySize.width = geometry.width myPos.x = geometry.x elif myPos.x + mySize.width > geometry.x + geometry.width: myPos.x = geometry.x + geometry.width - mySize.width if mySize.height > geometry.height: mySize.height = geometry.height myPos.y = geometry.y elif myPos.y + mySize.height > geometry.y + geometry.height: myPos.y = geometry.y + geometry.height - mySize.height self.SetPosition(myPos) self.SetSize(mySize)