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 :

problème d'affichage initial


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Par défaut problème d'affichage initial
    Bonjour à tous,

    Je suis un peu nouveau dans la programmation (et en l'occurrence python) mais je me suis lancé depuis trois jours dans la réalisation d'un petit programme de structure. La partie python ne me cause pas vraiment de problème, mais celui de wxpython un peu plus ;-)

    En fait, j'ai un problème d'affichage. Sans doute est-ce une broutille et qu'on a déjà du traiter ce problème mille fois, malheureusement, étant à Madagascar, je n'ai pas d'accès internet me permettant de rester des heures à fouiner dans les forums à la recherche de ce couac.

    Je vous met si joint une parti du code source.
    Je travail avec python 2.6

    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
     
     
    # -*- coding: utf-8 -*-
     
    import wx 
    from numpy import *
    import matrice
     
    #import equation
     
    class TestFrame(wx.Frame):
     
        def __init__(self): 
            wx.Frame.__init__(self, None, -1, 'STRUCTURE',size=(400, 400))
     
    ##        variables
            self.xy = [0,0]
     
    ##        Création du panneau 
            panel = wx.Panel(self, -1, size=(400,400))
     
    ##
    ##        Création du sizer                
            self.sizerD = wx.GridBagSizer( hgap=10, vgap=0)
     
    ##      mise en place du sizer dans la fenêtre     
            panel.SetSizer(self.sizerD)
            self.Fit()
     
    ##      Création du display
     
            self.display = wx.TextCtrl(panel,-1, value=" ",style = wx.TE_MULTILINE,size = (100,60))
            self.sizerD.Add(self.display,pos=(1,0),span=(6,1),  flag = wx.EXPAND)
     
    ##      Création de la Listbox
            self.sampleList = [] 
            self.listBox = wx.ListBox(panel, -1, (20, 20), (80, 120), self.sampleList, wx.LB_SINGLE)
            self.listBox_barre1 = wx.ListBox(panel, -1, (20, 20), (80, 120), self.sampleList, wx.LB_SINGLE)
            self.listBox_barre2 = wx.ListBox(panel, -1, (20, 20), (80, 120), self.sampleList, wx.LB_SINGLE)
            self.sizerD.Add(self.listBox,pos=(5,1),span=(1,1),flag = wx.EXPAND)
     
    ##      Gestion du redimensionnement
            self.sizerD.AddGrowableCol(0)
            self.sizerD.AddGrowableRow(5)
     
    app = wx.PySimpleApp() 
    TestFrame().Show()
    app.MainLoop()
    Lors du lancement, tant que je ne redimensionne pas ma fenêtre manuellement, tous les boutons, Listbox etc (ici, j'ai juste remis deux objets)sont mis les uns sur les autres. Assez gênant..

    Comment pourrais-je faire pour avoir directement une présentation correcte? Merci d'avance pour vos réponses :-)

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 76
    Par défaut
    Bonjour !

    Ce genre de problème est souvent réglé en appelant la méthode Layout() de ta classe héritant de wx.Frame. En fait, lorsque tu redimensionnes la fenêtre cette méthode est automatiquement appelée (plus exactement si SetAutoLayout() est activé ). Essaie de faire un self.Layout() à la fin du constructeur de TestFrame.

    Si cela ne marche toujours pas, tu peux magouiller en déclenchant un événement de redimensionnement avec la méthode SendSizeEvent().

    En espérant que ça t'aide, moi j'ai bien galéré au début avec des trucs pareils. ^^

  3. #3
    Membre éprouvé
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Par défaut
    Bonsoir,

    Je confirme qu'habituellement c'est un problème qui est résolu en appelant la méthode .Layout(). Et comme clic4, j'ai moi aussi ramé de façon épouvantable avec ce souci - qui me revient d'ailleurs régulièrement car je fais des interfaces dynamiques et il faut invoquer cette méthode régulièrement.

    Ce qui me surprend un peu c'est que j'ai testé ton code et... chez moi, il marche très bien ! Je suis sous GNU/ Linux Mandriva 2009.1 ; tu es sous quel OS ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 42
    Par défaut
    Je suis sous win7

    j'ai essayé vos conseils mais sans résultats probant.

    Par contre, j'ai trouvé il y a 5 min une commande qui est utile pour les utilisateurs de windows (ce qui corroborerait le fait que sous linux, il n'y ai pas de problème d'affichage) face à ce type de problème:

    self.SetClientSize(panel.GetBestSize())

    Cela m'a déjà corriger mes bugs d'affichage lors du lancement de l'application.

    Bref, me voilà presque dépanné;-) Merci en tout cas pour vos réponse!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Salut,

    Mets la ligne
    self.Fit()
    après la ligne
    self.sizerD.AddGrowableRow(5)

    Et oui, car sinon, tu demandes à wxPython de dimensionner la frame avant même que le contenu soit créé. C'est donc normal que ta frame soit trop petite.

    J'te parie que cela va fonctionner...

    A +

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Il y a des choses bizarre dans ton code. Tous tes listBox sont positionnées à (20, 20), c'est surement une des causes du problème. La position est à utiliser seulement si tu n'utilises pas de sizer. Il faut mettre self.listBox_barre1 et self.listBox_barre2 dans ton sizer avec la méthode .Add(). Et comme l'a dit Ggamer, met panel.SetSizer(self.sizerD) et self.Fit() à la fin de ton code.
    Je ne sais pas exactement se que tu veux faire, mais es tu sûr de l'utilité d'un GridBagSizer?
    A première vu, tu dois pouvoir t'en sortir avec des BoxSizer.

Discussions similaires

  1. Problème d'affichage
    Par mustang-gx dans le forum Bases de données
    Réponses: 8
    Dernier message: 26/01/2005, 22h54
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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