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

Python Discussion :

Problème pour lancer une fonction dans une classe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut Problème pour lancer une fonction dans une classe
    Bonjour,

    Voici un bout du code sur lequel je travaille actuellement:
    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
    #-*- coding: utf-8 -*-
     
    import wx
     
     
    class MenuLeft():
        def __init__(self, parent):
    	pnl = wx.Panel(parent, -1, pos = (0,0), size = (185, 800))
     
    	self.btn = wx.Button(pnl, 100, u"Ajouter", pos = (5, 150), size = (175,-1)) 
     
    	#wx.EVT_BUTTON(self, 100, Page1.Ajout(Page1))  ### C'est ici que ça bug
     
     
    class MenuPrincipal():
        def __init__(self, parent):
    	self.page = wx.Notebook(parent, -1, pos = (200,0), size = (900, 800))
    	Page1(self.page)
     
     
     
    class Page1():
        def __init__(self, parent):
    	pnl = wx.Panel(parent, -1, pos = (200,0), size = (900, 800))
    	pnl.SetBackgroundColour(wx.LIGHT_GREY)
    	parent.AddPage(pnl, "Fiche Client")
    	txt1 = wx.StaticText(pnl, -1, u"texte 1", pos = (5,5))
     
     
    	self.txt = wx.TextCtrl(pnl, -1, pos = (70, 2), size = (90, -1), style = wx.TE_READONLY)
     
     
        def Ajout(self):
    	self.code.SetEditable(1)
            print "ok"
     
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre, size = (1100,800))
            self.Center(True)
    	self.SetSizeHints(self.GetSize().x,self.GetSize().y,self.GetSize().x,self.GetSize().y)
     
            menuFichier = wx.Menu()
            menuFichier.Append(wx.ID_EXIT, "Quitter", u"Quitter le programme")
     
    	menuOutil = wx.Menu()
     
     
            menuBarre = wx.MenuBar()
            menuBarre.Append(menuFichier, "Fichier")
    	menuBarre.Append(menuOutil, "Outils")
     
            self.SetMenuBar(menuBarre)
     
    	MenuLeft(self)
    	MenuPrincipal(self)
     
     
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root(u'TOTO')
            fen.Show(True)
            self.SetTopWindow(fen)
            return True  
     
    app = MonApp()
    app.MainLoop()
    Si la ligne actuellement commentée est décommentée, j'ai une erreur qui se produit.

    Mon souhait est de pouvoir lancer une fonction dans la classe Page1 part l'action d'un bouton de la classe MenuLeft.

    Je n'ai pas réellement l'habitude d'utiliser les classes. Jusqu'à présent je faisais beaucoup de "fonction de fonction de fonction...."
    Et là je bute sérieusement.

    D'avance merci de votre aide.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 065
    Par défaut
    Je ne sais pas si c'est l'erreur fatale, mais il y a sûr une erreur!

    La fonction Ajout de la classe Page1 ne prend pas d'argument

    Et tu n'instancies pas la classe Page1 avec l'argument parent

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    j'ai refait mon code ainsi...

    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
    #-*- coding: utf-8 -*-
     
    import wx
     
    class MenuLeft(wx.Panel):
        def __init__(self, conteneur):
    	wx.Panel.__init__(self, conteneur, pos = (0,0), size = (185, 800))
    	self.btn = wx.Button(self, 100, u"Ajouter", pos = (5, 150), size = (175,-1)) 
     
    	wx.EVT_BUTTON(self, 100, self.essai)
     
        def essai(self, evt):
    	page1 = Page1()
    	page1.Ajout()
     
     
    class MenuPrincipal(wx.Notebook):
        def __init__(self, conteneur):
    	wx.Notebook.__init__(self, conteneur, pos = (200,0), size = (900, 800))
    	page1 = Page1()
    	page1.creawidget(self)
     
     
    class Page1(wx.Panel):
        def __init__(self):
    	pass
        def creawidget(self, conteneur):
    	wx.Panel.__init__(self,conteneur, pos = (200,0), size = (900, 800))
    	self.SetBackgroundColour(wx.LIGHT_GREY)
    	conteneur.AddPage(self, "Fiche Client")
    	txt1 = wx.StaticText(self, -1, u"texte 1", pos = (5,5))
     
    	self.txt = wx.TextCtrl(self, -1, pos = (70, 2), size = (90, -1), style = wx.TE_READONLY)
     
     
        def Ajout(self):
    	self.txt.SetEditable(1)
            print "ok"
     
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre, size = (1100,800))
            self.Center(True)
    	self.SetSizeHints(self.GetSize().x,self.GetSize().y,self.GetSize().x,self.GetSize().y)
     
            menuFichier = wx.Menu()
            menuFichier.Append(wx.ID_EXIT, "Quitter", u"Quitter le programme")
     
    	menuOutil = wx.Menu()
     
     
            menuBarre = wx.MenuBar()
            menuBarre.Append(menuFichier, "Fichier")
    	menuBarre.Append(menuOutil, "Outils")
     
            self.SetMenuBar(menuBarre)
     
    	MenuLeft(self)
    	MenuPrincipal(self)
     
     
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root(u'TOTO')
            fen.Show(True)
            self.SetTopWindow(fen)
            return True  
     
    app = MonApp()
    app.MainLoop()
    Déjà je pense qu'il est un peu plus correct.

    Mais le problème c'est déplacé. Maintenant j'ai le message suivant lors de l'appui du bouton:
    Traceback (most recent call last):
    File "C:\Documents and Settings\Charlie\Bureau\untitled-1.py", line 14, in essai
    page1.Ajout()
    File "C:\Documents and Settings\Charlie\Bureau\untitled-1.py", line 37, in Ajout
    self.txt.SetEditable(1)
    AttributeError: 'Page1' object has no attribute 'txt'
    ...

    Sauf que là je vois pas du tout pourquoi il me dit ça ^^.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 065
    Par défaut
    Le problème cette fois-ci est du côté de wx, et là je ne connais pas.

    A toi de voir si wx.TextCtrl a bien un attribut SetEditable

  5. #5
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonsoir,

    Apparement la variable .txt n'est pas créée à temps bof j'ai bricolé comme j'ai pu et...
    je crois que ceci marche mais je ne sais pas si c'est l'idée que tu avais!

    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
    73
    74
    #-*- coding: utf-8 -*-
     
    import wx
     
    class MenuLeft(wx.Panel):
        def __init__(self, conteneur,book=None):
            wx.Panel.__init__(self, conteneur, pos = (0,0), size = (185, 800))
            self.btn = wx.Button(self, 100, u"Ajouter", pos = (5, 150), size = (175,-1)) 
     
            wx.EVT_BUTTON(self, 100, self.essai)
            self.book = book
     
        def essai(self, evt):
            page1 = Page1(self.book)
            page1.Ajout()
     
     
    class MenuPrincipal(wx.Notebook):
        def __init__(self, conteneur):
            wx.Notebook.__init__(self, conteneur, pos = (200,0), size = (900, 800))
            page1 = Page1(self)
            #page1.creawidget(self)
     
     
    class Page1(wx.Panel):
        def __init__(self,conteneur):
            self.creawidget(conteneur)
            pass
        def creawidget(self, conteneur):
            wx.Panel.__init__(self,conteneur, pos = (200,0), size = (900, 800))
            self.SetBackgroundColour(wx.LIGHT_GREY)
            conteneur.AddPage(self, "Fiche Client")
            txt1 = wx.StaticText(self, -1, u"texte 1", pos = (5,5))
     
            self.txt = wx.TextCtrl(self, -1, pos = (70, 2), size = (90, -1), style = wx.TE_READONLY)
     
     
        def Ajout(self):
            self.txt.SetEditable(1)
            print "ok"
     
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre, size = (1100,800))
            self.Center(True)
            self.SetSizeHints(self.GetSize().x,self.GetSize().y,self.GetSize().x,self.GetSize().y)
     
            menuFichier = wx.Menu()
            menuFichier.Append(wx.ID_EXIT, "Quitter", u"Quitter le programme")
     
            menuOutil = wx.Menu()
     
     
            menuBarre = wx.MenuBar()
            menuBarre.Append(menuFichier, "Fichier")
            menuBarre.Append(menuOutil, "Outils")
     
            self.SetMenuBar(menuBarre)
     
            self.menu = MenuPrincipal(self)
     
            MenuLeft(self,self.menu)
     
     
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root(u'TOTO')
            fen.Show(True)
            self.SetTopWindow(fen)
            return True  
     
    app = MonApp()
    app.MainLoop()
    @+ et bon code!
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    C'est effectivement ce que je veux faire.

    Fred je te confirme que le wx.TextCtrl a bien un attribut SetEditable.

    Par contre chez moi:
    * Le wx.TextCtrl de devient pas éditable.
    * j'ai un gros soucis d'affichage.

    Afranck64, as-tu aussi ces problèmes?
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Réponses: 1
    Dernier message: 01/04/2010, 14h49
  3. récupérer une variable d'une fonction dans une classe
    Par free_dom dans le forum Général Python
    Réponses: 20
    Dernier message: 08/07/2009, 12h35
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. Response.Redirect dans une fonction dans une classe
    Par jpower dans le forum ASP.NET
    Réponses: 14
    Dernier message: 24/08/2007, 09h45

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