#!/usr/bin/env python # -*- coding: utf8 -*- # Import des modules import wx # Ce module utilise le nouvel espace de nom wx. #--------------------------------------------------------------------------- class MyFrame(wx.Frame): """ Crée la classe de la frame principale. """ isRolled = 0 def __init__(self, parent, id): wx.Frame.__init__(self, None, -1, title=u"Enrouler / Dérouler la fenêtre", style=wx.DEFAULT_FRAME_STYLE) # Lie l'événement de fermeture au gestionnaire d'événements self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) #------------------------------------------------------------------- # Crée un conteneur panel = wx.Panel(self, -1) #------------------------------------------------------------------- # Déclare les méthodes d'initialisation simplifiées self.createMenuBar() #------------------------------------------------------------------- # Centre la frame à l'écran self.CenterOnScreen() #----------------------------------------------------------------------- def createMenuBar(self): """ Crée la barre de menus et les menus. """ # Crée la barre de menus menuBar = wx.MenuBar() #------------------------------------------------------------------- #------------------------------------------------------------------- # Ajoute un menu "Fichier" menuFile = wx.Menu(style=wx.MENU_TEAROFF) #------------------------------------------------------------------- #------------------------------------------------------------------- # Ajoute des commandes item = wx.MenuItem(menuFile, -1, text="En&rouler\tF3", help=u"Réduit l'application à sa barre de titre.") menuFile.AppendItem(item) # Lie l'événement de menu au gestionnaire d'événements self.Bind(wx.EVT_MENU, self.OnRoll, item) #------------------------------------------------------------------- item = wx.MenuItem(menuFile, -1, text=u"&Dérouler\tF4", help=u"Restaure l'application à sa taille initiale.") menuFile.AppendItem(item) # Lie l'événement de menu au gestionnaire d'événements self.Bind(wx.EVT_MENU, self.OnUnRoll, item) #------------------------------------------------------------------- item = wx.MenuItem(menuFile, -1, text="&Quitter\tCtrl+Q", help="Quitte l'application.") menuFile.AppendItem(item) # Lie l'événement de menu au gestionnaire d'événements self.Bind(wx.EVT_MENU, self.OnCloseMe, item) #------------------------------------------------------------------- #------------------------------------------------------------------- # Place le menu dans la barre de menus menuBar.Append(menuFile, title="&Fichier") #------------------------------------------------------------------- #------------------------------------------------------------------- # Attache la barre de menus à la fenêtre self.SetMenuBar(menuBar) #----------------------------------------------------------------------- def OnRoll(self, event): """ Enroule la fenêtre. """ if self.isRolled == 1: return self.isRolled = 1; # Récupére taille et position de la frame # pos, size = self.GetPosition(), self.GetSize() self.pos1 = self.GetPosition() self.size1 = self.GetSize() if wx.Platform == "__WXMAC__": self.SetSize((-1, 22)) elif wx.Platform == "__WXGTK__": self.SetSize((-1, 0)) else: self.SetSize((-1, 0)) print(self.pos1, self.size1) def OnUnRoll(self, event): """ Déroule la fenêtre. """ self.isRolled = 0 # Récupére taille et position de la frame # pos, size = self.GetPosition(), self.GetSize() self.pos2 = self.GetPosition() self.size2 = self.GetSize() if wx.Platform == "__WXMAC__": self.SetSize(self.size1) elif wx.Platform == "__WXGTK__": self.SetSize(self.size1) else: self.SetSize(self.size1) print(self.pos2, self.size2) # SetDimensions(wx.Point point, wx.Size size) # self.SetDimensions(-1, -1, 800, 640) def OnCloseMe(self, event): """ Ferme l'application. """ self.Close(True) def OnCloseWindow(self, event): """ Quitte et détruit l'application. """ self.Destroy() #--------------------------------------------------------------------------- class App(wx.App): """ Toutes les applications wxWindows doivent avoir une classe dérivée de wxApp. """ # wxWindows appelle cette méthode pour initialiser l'application def OnInit(self): frame = MyFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) # Renvoie un indicateur de réussite return True #--------------------------------------------------------------------------- if __name__ == "__main__": """ Démarrage du gestionnaire d'événements (boucle principale). """ # Crée une instance de la classe wxApp app = App(False) # Démarre le processus d'événements app.MainLoop()