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 :

User interaction dans une autre file


Sujet :

wxPython

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut User interaction dans une autre file
    Je suis essayer de creer un petit GUI application avec wxPython.
    Pour la clarté du code de source je veux séparer le GUI-code et le 'vrai' code:

    (j'ai creé une petite application test. Un Frame avec un button et label, can je presse sur le button le label va changer).

    Maincode:
    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
     
    import wx
    import gui
     
    class TestApp(wx.App):
        def OnInit(self):
            self.main = gui.create(None)
            self.main.Show()
            self.SetTopWindow(self.main)
            return True
     
    def main():
        application = TestApp(0)
        application.MainLoop()
     
    if __name__ == '__main__':
        main()
     
    def OnButton1Click(event):
        gui.Frame1.Label1.Label = 'zever'

    gui.py
    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
     
    import wx
    import main
     
    def create(parent):
        return Frame1(parent)
     
    [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1LABEL1, wxID_FRAME1PANEL1, 
    ] = [wx.NewId() for _init_ctrls in range(4)]
     
    class Frame1(wx.Frame):
        def _init_ctrls(self, prnt):
            # generated method, don't edit
            wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
                  pos=wx.Point(239, 326), size=wx.Size(414, 266),
                  style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
            self.SetClientSize(wx.Size(406, 239))
     
            self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
                  pos=wx.Point(0, 0), size=wx.Size(406, 239),
                  style=wx.TAB_TRAVERSAL)
     
            self.Label1 = wx.StaticText(id=wxID_FRAME1LABEL1, label='Label1',
                  name='Label1', parent=self.panel1, pos=wx.Point(152, 56),
                  size=wx.Size(31, 13), style=0)
     
            self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='button1',
                  name='button1', parent=self.panel1, pos=wx.Point(136, 104),
                  size=wx.Size(75, 23), style=0)
            self.button1.Bind(wx.EVT_BUTTON, main.OnButton1Click,
                  id=wxID_FRAME1BUTTON1)
     
        def __init__(self, parent):
            self._init_ctrls(parent)
    ça ne marche pas,
    Quand je presse le button Python retourne le erreur "AttributeError: type object 'Frame1' has no attribute 'Label1'"
    J'ai deja essayé beaucoup de variants sur la ligne 'gui.Frame1.Label1.Label = 'zever'', mais rien marche

    Quelqu'n qui sais comment je peut fais ça?

  2. #2
    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
    Bonjour,
    C'est normal que ça ne marche pas, il y a beaucoup d'anomalies dans ton code.
    La programmation objet n'a pas l'air d'être encore bien clair pour toi.
    La manière la plus simple de séparer les éléments graphiques de ton code, est d'étendre TestApp par Frame1.
    Je ne vais pas rentrer dans les détails, ça serai un peu long.

    Je crois que tu utilises Boa pour générer ton code. Essaye de le faire "à la main" pour bien comprendre et ensuite seulement tu peux utiliser un RAD (pour ma part je préfère utiliser wxglade)

    Voici ton code corrigé. J'ai positionné les éléments grâce aux sizer. Demande si tu ne comprends pas.

    main.py
    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
     
    import wx
    from gui import Frame1
     
    class TestApp(Frame1):
    	def __init__(self):
    		Frame1.__init__(self, None)
    		self.Show()
     
    	def OnButton1Click(self, event):
    		self.label1.SetLabel('zever')
    		self.Layout()
     
    if __name__ == '__main__':
    	app = wx.App(0)
    	frame = TestApp()
    	app.MainLoop()
    gui.py
    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
     
    import wx
     
     
    class Frame1(wx.Frame):
    	def __init__(self, parent):
    		wx.Frame.__init__(self, parent, size=wx.Size(414, 266), title='Frame1')
    		self.label1 = wx.StaticText(self, -1, 'Label1')
    		self.button1 = wx.Button(self, -1, 'Button1')
     
    		self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Click)
     
    		sizerPrinc = wx.BoxSizer()
    		sizer = wx.BoxSizer(wx.VERTICAL)
    		sizer.Add(self.label1, 0, wx.ALIGN_CENTER_HORIZONTAL)
    		sizer.Add(self.button1, 0, wx.ALIGN_CENTER_HORIZONTAL)
    		sizerPrinc.Add(sizer, 1, wx.ALIGN_CENTER_VERTICAL)
    		self.SetSizer(sizerPrinc)

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2009, 17h43
  2. Réponses: 2
    Dernier message: 28/08/2003, 00h00
  3. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51
  4. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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