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

  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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    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
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    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
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    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

  7. #7
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonsoir, Jyuu

    Oui je vois je n'y avais pas pretté attention vu que le txtCtrl des autres onglets était éditable.

    En fait il te faut ajouter la ligne

    self.txt.SetEditable(1)

    juste après avoir créer self.txt
    je l'ai fait et voici!
    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
    75
    #-*- 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)
            self.txt.SetEditable(1)
     
     
        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()
    J'espère ça règlera ton problème

    @+ 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

  8. #8
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Tu dois manquer de sommeil.... regarde ma fonction ^^...

    Le but en fait c'est de rendre le TextCtrl éditable en cliquant sur un boutton.

    Et concernant le problème graphique l'as-tu toi aussi?
    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

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Le wx.TextCtrl de devient pas éditable.
    As-tu essayé avec l'interpréteur ? Peut-être trouveras-tu où se trouve ton erreur.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Aucun message d'erreur dans l'interpréteur...
    J'ai refait le 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
    72
    73
    74
    75
    76
    77
    78
    79
    #-*- 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):
    ##Partie modifiée
        def __init__(self,conteneur):
            if conteneur != None:
                self.creawidget(conteneur)
            else:
                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)
            self.txt.SetEditable(1)
        
     
        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()
    en me disant que recréer des widgets déjà créés était sûrement la source de mon problème.
    Ceci ne corrige ni le fait que self.txt reste non éditable, ni le problème graphique que je rencontre.
    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

  11. #11
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Chez moi ce code (simplifié) fonctionne parfaitement
    OS: Linux Ubuntu Lucid Lynx
    Python 2.6
    wxpython 2.8.10
    Pas de problème graphique, et le champ texte est éditable
    Je pense qonc qu'il s'agit d'une incompatibilité entre ta version python et ta version wx. Regarde bien les docs.
    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
    #-*- 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)
     
     
    class MenuPrincipal(wx.Notebook):
        def __init__(self, conteneur):
            wx.Notebook.__init__(self, conteneur, pos = (200,0), size = (900, 800))
            page1 = Page1(self)
     
     
    class Page1(wx.Panel):
    ##Partie modifiée
        def __init__(self,conteneur):
            if conteneur != None:
                self.creawidget(conteneur)
            else:
                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))
     
     
    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()
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  12. #12
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Chez moi ce code (simplifié) fonctionne parfaitement
    OS: Linux Ubuntu Lucid Lynx
    Python 2.6
    wxpython 2.8.10
    Pas de problème graphique, et le champ texte est éditable
    Je pense qonc qu'il s'agit d'une incompatibilité entre ta version python et ta version wx. Regarde bien les docs.
    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
    #-*- 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)
     
     
    class MenuPrincipal(wx.Notebook):
        def __init__(self, conteneur):
            wx.Notebook.__init__(self, conteneur, pos = (200,0), size = (900, 800))
            page1 = Page1(self)
     
     
    class Page1(wx.Panel):
    ##Partie modifiée
        def __init__(self,conteneur):
            if conteneur != None:
                self.creawidget(conteneur)
            else:
                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))
     
     
    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()
    Oui chez moi aussi, mais là la fonction qui me pose problème n'ai plus dans Page1 ^^...
    Le but de mon code est de permettre de rendre un TextCtrl éditable en appuyant sur un bouton.
    Le souci c'est que le bouton et le textctrl ne sont pas dans la même class.

    Je viens de faire un essai en les mettant tous les deux dans la même et là ça fonctionne nikel
    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

  13. #13
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    premièrement excuses moi d'ainsi bousiller ton code mais bon...
    regarde un peu ceci mais je ne m'y connais pas bien (vraiment pas...) en wx. j'ai ajouté le bouton editable mais il ne marche qu'après avoir utilisé "Ajouter" autrement dit avec les autres onglets (2..n)
    sinon l'idée c'est de passer en paramètre le widget dont tu auras pour l'utiliser comme bon te semble.

    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
    75
    76
    77
    78
    #-*- coding: utf-8 -*-
     
    import wx
     
    class MenuLeft(wx.Panel):
        def __init__(self, conteneur,book=None,txt=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))
            self.btn2 = wx.Button(self, 90, u"Editable", pos = (5,180), size = (175,-1))
     
            wx.EVT_BUTTON(self, 100, self.essai)
            wx.EVT_BUTTON(self, 90,self.editable)
            self.book = book
            #self.mapage1 = conteneur.page1
     
        def essai(self, evt):
            self.mapage1 = Page1(self.book)
            self.mapage1.txt.SetEditable(0)
     
        def editable(self,evt):
            self.mapage1.txt.SetEditable(1)
     
     
     
    class MenuPrincipal(wx.Notebook):
        def __init__(self, conteneur):
            wx.Notebook.__init__(self, conteneur, pos = (200,0), size = (900, 800))
            self.page = Page1(self)
            self.page.txt.SetEditable(0)
     
     
    class Page1(wx.Panel):
    ##Partie modifiée
        def __init__(self,conteneur):
            if conteneur != None:
                self.creawidget(conteneur)
            else:
                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))
     
     
    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

  14. #14
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Oui chez moi aussi, mais là la fonction qui me pose problème n'ai plus dans Page1 ^^...
    Le but de mon code est de permettre de rendre un TextCtrl éditable en appuyant sur un bouton.
    Le souci c'est que le bouton et le textctrl ne sont pas dans la même class.
    Le problème plus général osé est la gestion de l'interaction entre des contrôles ctrl1 , ctrl2 placés dans des conteneurs différents C1, C2.
    En général ces conteneurs sont eux mêmes situés dans un conteneur plus général G.
    Pour qu'un contrôle placé dans C1 effectue une mise à jour sur un contrôle situé dans C2, il faut 'passer par G' en montant à partir de C1 puis en redescendant jusqu'à C2.
    Pour faire la montée on utilise itérativement la donnée membre 'parent' (self.parent pointe sur le conteneur).
    Pour redescendre on utilise les identificateurs des enfants G.C2.button2
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

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