IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Gestion des event sur un menu


Sujet :

wxPython

  1. #1
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut Gestion des event sur un menu
    Re-salut à toutes et à tous.

    Tjs en pleine découverte de wx, je m'amuse à présent avec les menus.
    De ce que j'ai compris, il faut assigner un ID unique à chaque MenuItem pour pouvoir les reconnaître et gérer les clicks et autres.
    Leur exemple est le suivant (à défaut d'en avoir fait un moi-même):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ID_ABOUT = 101
    ID_EXIT  = 102
     
    class MyFrame(wxFrame):
        def __init__(self, parent, ID, title):
            (...)
     
            menu = wxMenu()
            menu.Append(ID_ABOUT, "&About",
                        "More information about this program")
            menu.AppendSeparator()
            menu.Append(ID_EXIT, "E&xit", "Terminate the program")
            menuBar = wxMenuBar()
            menuBar.Append(menu, "&File");
            self.SetMenuBar(menuBar)
     
            EVT_MENU(self, ID_ABOUT, self.OnAbout)
            EVT_MENU(self, ID_EXIT,  self.TimeToQuit)
     
        (...)
    Mais je trouve ça horrible !
    Dans le sens qu'on est obligés de définir un ID par élément de menu, et de s'assurer qu'il soit unique. Atroce !

    N'y a-t-il pas un moyen ressemblant plutôt à celui-ci ? Ca m'éviterait de devoir créer une sorte de gestionnaire d'id de menu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    menu = wx.Menu()
    miAbout = wx.MenuItem("&About", "More information about this program")
    miExit = wx.MenuItem("&Exit", "Exit")
    EVT_MENUITEM_LEFT_UP(miAbout, self.OnAbout)
    EVT_MENUITEM_LEFT_UP(miExit, self.TimeToQuit)

  2. #2
    Membre averti Avatar de Saintux
    Homme Profil pro
    Chercheur ( de travail )
    Inscrit en
    Janvier 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur ( de travail )
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 39
    Par défaut
    Bonjours à toi,

    Je ne pense pas qu'il soit possible de faire comme tu le souhaite, mais il existe des ID prédéfinis par wx :

    http://docs.wxwidgets.org/stable/wx_....html#stdevtid

    Ton code deviendrait ansi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class MyFrame(wxFrame):
        def __init__(self, parent, ID, title):
            (...)
     
            menu = wxMenu()
            menu.Append(wx.ID_ABOUT, "&About",
                        "More information about this program")
            menu.AppendSeparator()
            menu.Append(wx.ID_EXIT, "E&xit", "Terminate the program")
            menuBar = wxMenuBar()
            menuBar.Append(menu, "&File");
            self.SetMenuBar(menuBar)
     
            EVT_MENU(self, wx.ID_ABOUT, self.OnAbout)
            EVT_MENU(self, wx.ID_EXIT,  self.TimeToQuit)
     
        (...)

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ca reste un peu brouillon je trouve, mais j'imagine qu'il y a un intérêt quelconque à se servir de valeurs standard. Y a-t-il quelque chose de bien que je n'aie pas encore vu ?

    Sinon, j'avais imaginer créer une petite classe qui se chargerait de donner des id's elle même. Mais j'ai vu dans ton lien que wx m'a devancé :p
    On peut se servir de wx.ID_ANY, c'est à dire que wx attribue li-même un id inutilisé.

    C'est bien, mais on aurait pu rêver mieux je trouve...


    Merci pour ta réponse

  4. #4
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    On peut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import wx
     
    class TestMenu(wx.Frame):
        def __init__(self, parent,id):
            wx.Frame.__init__(self, parent, id, 'test menu')
            menubar = wx.MenuBar()
            file = wx.Menu()
            quit = wx.MenuItem(file,-1, '&Quitter\tCtrl+Q','Quitter')
            file.AppendItem(quit)
            menubar.Append(file, '&Fichier')
            self.SetMenuBar(menubar)
            self.Bind(wx.EVT_MENU, self.OnQuit, quit)
     
        def OnQuit(self, event):
            self.Close()
     
    class MyApp(wx.App):
        def OnInit(self):
            frame = TestMenu(None, -1)
            frame.Show(True)
            return True
     
    app = MyApp(0)
    app.MainLoop()

  5. #5
    Membre éprouvé
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Par défaut
    Citation Envoyé par pierjean Voir le message
    Bonjour,
    On peut faire comme ça :
    (...)
    Grilled !

    Je fais pareil...

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut Pierjean.
    Utiliser -1 revient effectivement à utiliser wx.ID_ANY.
    Par contre je ne savais pas qu'on pouvait passer directement le MenuItem pour la gestion d'événements... et ça c'est bien

    Merci à tous les trois pour ces infos, c'est précisément ce qu'il me fallait

Discussions similaires

  1. [PHP-JS] gestion des erreurs sur liste déroulente
    Par HwRZxLc4 dans le forum Langage
    Réponses: 9
    Dernier message: 28/05/2006, 03h21
  2. [2D] Gestion des sprites sur un moteur 2d
    Par drcd dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 27/03/2006, 16h17
  3. Réponses: 4
    Dernier message: 25/11/2005, 18h15
  4. Application de gestion des sms sur PC
    Par andyvo dans le forum Langage
    Réponses: 9
    Dernier message: 20/10/2005, 23h49
  5. [C#] Gestion des Events d'un control Composite
    Par lord_paco dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/10/2005, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo