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 :

Fenetre + menu + bouton pour un débutant


Sujet :

wxPython

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Points : 36
    Points
    36
    Par défaut Fenetre + menu + bouton pour un débutant
    Bonjour,
    Je débute entièrement dans Python et tente de créer une simple application avec « wxPython »
    Je suis désolé de vous déranger pour des choses qui doivent vous paraître bien simple, mais, là… Je jette l’éponge.
    Je souhaite créer une simple fenêtre avec un bête menu et un simple bouton.
    L’idée est d’isoler la création du menu et l’interface graphique de l’application principale.
    Je crée donc deux classes (l’une pour le menu et l’autre pour l’interface graphique). Et là, je ne comprends plus rien… A force d’essayer de faire tourner cette petite application, je ne sais plus où j’en suis !!! Je mélange tout et je ne sais pas où j’ai péché…
    Quelqu’un peut m’aider à mettre de l’ordre dans tout ça ?
    J’ai besoin de beaucoup de pédagogie, je pars de loin… Et semble t’il, je n’ai pas assimilé les cours de « M Gérard Swinnen ».
    Merci d’avance pour vos réponses

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    # Importer le Toolkit wxPython
    import wx
     
     
    #-------------------------------------------------------------------------
    class MenuFichier(wx.Frame):
        """Barre de menus déroulants"""
    #-------------------------------------------------------------------------
        def __init__(self, parent):
           wx.Frame.__init__(self, parent)
           menu = wx.Menu()
           menu.Append(wx.ID_OPEN, "&Ouvrir\tCTRL+o")
           menu.Append(wx.ID_CLOSE, "&Fermer\tCTRL+f")
           menu.AppendSeparator()
           menu.Append(wx.ID_EXIT, "&Quitter\tCTRL+q")
           menuBarre = wx.MenuBar()
           menuBarre.Append(menu, "&Fichier")
           self.SetMenuBar(menuBarre)
     
     
    #-------------------------------------------------------------------------
    class InterfaceGraphique(wx.Panel):
        """Interface Graphique"""
    #-------------------------------------------------------------------------
        def __init__(self, parent, log):
            self.log = log
            wx.Panel.__init__(self, parent, -1)
     
            b = wx.Button(self, -1, "Show the Menu sample", (50,50))
            self.Bind(wx.EVT_BUTTON, self.OnButton, b)
     
     
        def OnButton(self, evt):
           win = MyFrame(self, -1, self.log)
           win.Show(True)
    #-------------------------------------------------------------------------
     
    #-------------------------------------------------------------------------
    class Application(wx.Frame):
        """ Fenetre principale"""
    #-------------------------------------------------------------------------
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title)
            self.parent = parent
     
            # ------------------------------------------------------
            #    Initialisation du Menu
            # ------------------------------------------------------
            MenuFichier(parent)
     
            # ------------------------------------------------------
            #    Initialisation de l'interface graphique
            # ------------------------------------------------------
            InterfaceGraphique(parent)
     
     
    #-------------------------------------------------------------------------
     
     
    #-------------------------------------------------------------------------
    class MonApp(wx.App):
    #-------------------------------------------------------------------------
        def OnInit(self):
            frame = Application(None,-1,u'Fenêtre avec menus')
            frame.Show(True)
            self.SetTopWindow(frame)
            return True
    #-------------------------------------------------------------------------
    app = MonApp()
    app.MainLoop()

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour, pas simple wxPython pour commencer mais c'est tout aussi bien que de faire quelque chose en Tkinter plus simple mais moins performant.

    bien que peut expérimenter en wxPython, il me semble que votre class de menu n'est pas correcte.
    Si je comprend bien vous voulez créer une class de menu qui sera utilisé dans votre fenetre, et non pas afficher a part!? Est bien cela?
    Dans ce cas, la class menu ne devrait pas herité de wxFrame.
    La création d'une frame dans cette meme class n'est pas necessaire non plus je crois!

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Points : 109
    Points
    109
    Par défaut
    >Bonjour,

    Je suis d'accord : il y a un problème avec la classe de menu, puisqu'elle est déclarée en tant que wx.Frame... alors qu'elle devrait l'être en tant que wx.MenuBar !


    Autre souci : tu n'as pas déclaré l'encoding, en haut de ta page, alors que tu utilises des caractères non-ascii. Je te conseille d'ajouter ça ligne 1 (sous GNU/linux, c'est même davantage qu'un simple conseil...) :

    # -*- coding: iso-8859-15 -*-


    Enfin, dans le code ta frame, il y a plusieurs problèmes. Ce que tu veux, c'est que ta frame comporte une barre de menu, et un bouton :
    - déjà, tu as omis... de créer tes objets ! Par exemple, pour créer ton panel, tu devrais avoir une ligne du genre "MonInterfaceGraphique = InterfaceGraphique(...", où "MonInterfaceGraphique" est mon objet "panel", du type "InterfaceGraphique" ; si tu ne fais pas ça, cela s'affichera quand même mais tu auras vite les pires ennuis ;
    - tu veux que ces objets soient attachés à ta frame. Tu dois donc déclarer ta frame comme le parent de ces objets ; "InterfaceGraphique(parent)" comporte ainsi une erreur : le parent de l'objet dans ton code est le parent de la frame, non la frame elle-même ! Tu dois écrire "InterfaceGraphique(self)" ;

    Ci-joint code corrigé ; compare avec ton code initial pour bien piger. Bon courage !
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Points : 36
    Points
    36
    Par défaut
    Arf...Arf...
    C'est exactement ce que je souhaitais faire.
    Que le chemin est long ^^
    Merci pour ton script, il me permet de mieux comprendre ce qu'il me manquait pour faire tourner mon application.
    Je n'ai pas vraiment compris la notion de self et de parent. Pour moi, c'est vraiment confus

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    "self" et "parent" sont des notions essentielles avec wxpython, il te faut IMPERATIVEMENT les assimiler !

    Le cours de Gérard Swinnen ne te sera pas d'une grande aide pour wxpython, parce qu'il ne traite que de tkinter (en tout cas dans la version en ma possession)... Je te suggère le tuto d'Alain Delgrange ("Alain72"), tu devrais y trouver toutes les clés dont tu as besoin.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Points : 36
    Points
    36
    Par défaut
    Merci, je me suis bien rendu compte que c'était des choses essentielles
    Et c'est en partant du tuto d'Alain72 que j' ai commencé parti pour me perdre dans la multitude d'application qui traine sur le net à partir de wx.
    Néanmoins, je n'ai pas reellement trouvé la différence qu'il y a entre Self et PArent...
    En fait, quand faut il appliquer l'un ou l'autre... Dans ton code, tu as du (Self = parent) !!! Quand je te dis que je pars de loin.... ça devrait te donner une idée de l'infini

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Points : 109
    Points
    109
    Par défaut
    Tss, Tss...

    Non, dans le code que je t'ai fourni, il y a "parent = self" ! "self = parent", tu trouveras jamais !

    Fondamentalement, c'est pourtant simple :
    - les différents objets en wxpython ont un parent, et éventuellement un ou plusieurs enfants ;
    - dans le code d'un objet : "parent" désigne donc le parent de l'objet ; "self" ("moi-même" en français) désigne l'objet lui-même ;
    - dans ton cas, ta frame a deux enfants : la barre de menus et le panel ; donc, la barre de menus et le panel ont la frame pour parent. Le panel a un enfant : le bouton... qui a donc le panel pour parent. Le parent d'un bouton, d'une barre de menu, d'une case à cocher, etc. , est l'élément auquel il se rattache.

    Dans le code de ta frame :

    MonInterfaceGraphique = InterfaceGraphique(parent=self)

    ...tu crées un panel, sur la base d'un modèle-type que tu as établi (ce que l'on apelle une classe), et tu indiques que le parent de ce panel sera "self", c'est-à-dire "moi-même" ; cette ligne se trouve dans le code de ta frame : donc, "moi-même" : c'est... la frame. Ainsi, ton panel sera bien rattaché à ta frame et, visuellement, il apparaîtra bien dessus.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Points : 36
    Points
    36
    Par défaut
    Bon, faut que je me lance dans la géonologie....
    Pffff, j'y arriverais jamais...
    Tout me parait clair jusqu'à : "Dans le code de ta frame "
    Maintenant, je vais prendre un aspirine et relire la suite à tete reposée.
    Et pis, vais p'tete passer un coup de fil à ma mère à moi que j'ai et qui est un de mes parents
    En tout cas, merci de ta patience. c'est juste que je n'aurais jamais trouvé le "parent = self" tout seul ^^
    y a plus qu'à reprendre ça tranquilement.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML 5] Alignement d'un texte et d'un bouton pour une débutante
    Par Gan_user dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/06/2015, 09h49
  2. Réponses: 4
    Dernier message: 08/11/2007, 16h15
  3. Insérer des boutons pour personnaliser un menu
    Par rimbaut dans le forum Excel
    Réponses: 2
    Dernier message: 27/07/2007, 12h21
  4. Menu déroulant pour débutant
    Par gign2585 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/05/2007, 18h30
  5. Faire le meme bouton pour toutes mes fenetres
    Par dalton5 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/03/2007, 11h02

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