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 :

wxPython Problème d'héritage


Sujet :

wxPython

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Par défaut wxPython Problème d'héritage
    Bonjour à tous,

    je débute en python et j'essaie de faire une petite interface avec 3 onglets.
    J'ai donc fait une classe par onglet et une classe Frame.
    Tout se passe bien quand je fais des actions dans un onglet mais dès que je tente d'utiliser un objet d'un autre onglet ça ne marche plus...

    Allez pour la peine j'envoie tout:

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    #!/usr/bin/python
    # -*- coding: latin-1 -*
    
    # pyd_maker.py
    
    import wx
    import sys, os
    import cStringIO
    
    ID_QUIT = 1
    ID_OPEN = 2
    ID_OPEN2 = 3
    ID_OPEN3 = 4
    ID_OPEN4 = 5
    ID_OPEN5 = 6
    ID_RADIO1 = 7
    ID_RADIO2 = 8
    ID_RADIO3 = 9
    ID_RADIO4 = 10
    ID_MAKE = 11
    
    class PageOne(wx.Panel):
    	def __init__(self, parent):
    		wx.Panel.__init__(self, parent)
    		
    		self.t1 = wx.StaticText(self, -1, "Votre fichier Python de base: ", (20,30))
    		self.textbox = wx.TextCtrl(self, -1, "", (200,25), (300,20))
    		self.bouton1 = wx.Button(self, ID_OPEN, "Choose", (550,23))
    		
    		self.t2 = wx.StaticText(self, -1, "Votre module est : ", (20,80))
    		self.radio1 = wx.RadioButton ( self, ID_RADIO3, 'un fichier fortran', (40,120), style = wx.RB_GROUP )
    		self.radio2 = wx.RadioButton ( self, ID_RADIO4, 'un fichier python précompilé (pyd)', (40,160))
    		self.textbox2 = wx.TextCtrl(self, -1, "", (250,140), (250,20))
    		self.bouton2 = wx.Button(self, ID_OPEN2, "Choose", (550,138))
    
    		self.boutonmake = wx.Button(self, ID_MAKE, 'Make', (470,500))
    		self.boutonrun = wx.Button(self, -1, 'Run', (390, 500))
    		
    		self.t3 = wx.StaticText(self, -1, "Console :", (20,345))
    		self.output = wx.TextCtrl(self, -1, "", (50,375), (550,100), style = wx.TE_MULTILINE)
    		self.output.SetEditable(False)
    		
    		self.Bind(wx.EVT_BUTTON, self.button1Click, id=ID_OPEN)
    		self.Bind(wx.EVT_BUTTON, self.button2Click, id=ID_OPEN2)
    		self.Bind(wx.EVT_BUTTON, self.buttonMakeClick, id=ID_MAKE)
    		self.Bind(wx.EVT_RADIOBUTTON, self.radio1Click, id=ID_RADIO3)
    		self.Bind(wx.EVT_RADIOBUTTON, self.radio2Click, id=ID_RADIO4)
    
    	def button1Click(self, event):
    		dlgpy = wx.DirDialog(self, "Chemin de votre fichier python", style = wx.DD_DIR_MUST_EXIST)
    		retour = dlgpy.ShowModal()
    		chemin = dlgpy.GetPath()
    		self.textbox.SetValue(chemin)
    		dlgpy.Destroy()
    
    	def button2Click(self, event):
    		if (self.radio1.GetValue() == True):
    
    			wildcard = "Fortran files (.for)|*.for|"   \
    			"Fortran90 files (.f90)|*.f90|" \
    			"Fortran77 files (.f77)|*.f77|" \
    			"*.f|*.f|" \
    			"*.f40|*.f40|" \
    			"*.ftn|*.ftn"
    
    			dlgpy2 = wx.FileDialog(self, "Choisissez un fichier Fortran", style = wx.OPEN)
    			dlgpy2.SetWildcard(wildcard)
    			retour = dlgpy2.ShowModal()
    			chemin = dlgpy2.GetPath()
    			fichier = dlgpy2.GetFilename()
    			self.textbox2.SetValue(chemin)
    			dlgpy2.Destroy() 
    
    		else :
    		  	dlgpy2 = wx.FileDialog(self, "Choisissez un fichier Python", wildcard = "*.pyd", style = wx.OPEN)
    			retour = dlgpy2.ShowModal()
    			chemin = dlgpy2.GetPath()
    			fichier = dlgpy2.GetFilename()
    			self.textbox2.SetValue(chemin)
    			dlgpy2.Destroy()		
    	
    	def buttonMakeClick(self, event):
    		self.boutonmake.Enable(False)
    !!!!!!!!!	page2.radio2.SetValue(True)         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    		self.radio2.SetValue(True)
    !!!!!!!!!!	if page2.radio1.GetValue() == True:   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    			self.output.SetValue("mouahaha it works")
    		result = self.output.GetValue()+os.popen('cmd').read()
    		self.output.SetValue(result)
    	
    	def radio1Click(self, event):
    		self.boutonmake.Enable(True)
    	
    	def radio2Click(self, event):
    		self.boutonmake.Enable(False)	
    	
    
    class PageTwo(wx.Panel):
    	def __init__(self, parent):
    		self.cheminpyd = ""
    
    		wx.Panel.__init__(self, parent)
    		self.t = wx.StaticText(self, -1, "Exportation du .pyd une fois compilé :", (20,30))
    		self.radio1 = wx.RadioButton ( self, ID_RADIO1, 'au même endroit que le fichier Python', (40,70), style = wx.RB_GROUP )
    		self.radio2 = wx.RadioButton ( self, ID_RADIO2, 'chemin spécifié :', (40,110))
    		self.textbox = wx.TextCtrl(self, -1, "", (200,105), (300,20))
    		self.textbox.Enable(False)
    		self.bouton1 = wx.Button(self, ID_OPEN3, "Choose", (550,103))
    		
    		self.t2 = wx.StaticText(self, -1, "Chemin de votre compilateur Python :", (20,180))
    		self.textbox2 = wx.TextCtrl(self, -1, "c:\Python25", (250,175), (250,20))
    		self.bouton2 = wx.Button(self, ID_OPEN4, "Choose", (550,173))
    	
    		self.t3 = wx.StaticText(self, -1, "Chemin de votre compilateur Fortran :", (20,220))
    		self.textbox3 = wx.TextCtrl(self, -1, "c:\gfortran", (250,215), (250,20))
    		self.bouton3 = wx.Button(self, ID_OPEN5, "Choose", (550,213))		
    
    		self.boutoncancel = wx.Button(self, -1, 'Cancel', (470,500))
    		self.boutonrun = wx.Button(self, -1, 'Apply', (390, 500))		
    		
    		self.Bind(wx.EVT_RADIOBUTTON, self.radio1Check, id=ID_RADIO1)
    		self.Bind(wx.EVT_RADIOBUTTON, self.radio2Check, id=ID_RADIO2)
    		self.Bind(wx.EVT_BUTTON, self.button1Click, id=ID_OPEN3)
    		self.Bind(wx.EVT_BUTTON, self.button2Click, id=ID_OPEN4)
    		self.Bind(wx.EVT_BUTTON, self.button3Click, id=ID_OPEN5)
    		
    	def radio1Check(self, event):
    		self.textbox.Enable(False)
    		
    	def radio2Check(self, event):
    		self.textbox.Enable(True)
    		
    	def button1Click(self, event):
    		dlgpy3 = wx.FileDialog(self, "Chemin de votre .pyd", style = wx.OPEN)
    		self.radio2.SetValue(True)
    		self.textbox.Enable(True)
    		retour = dlgpy3.ShowModal()
    		chemin = dlgpy3.GetPath()
    		fichier = dlgpy3.GetFilename()
    		self.textbox.SetValue(chemin)
    		dlgpy3.Destroy()
    
    	def button2Click(self, event):
    		dlgpy4 = wx.FileDialog(self, "Chemin de python.exe", wildcard = "python.exe", style = wx.OPEN)
    		retour = dlgpy4.ShowModal()
    		chemin = dlgpy4.GetPath()
    		fichier = dlgpy4.GetFilename()
    		self.textbox2.SetValue(chemin)
    		dlgpy2.Destroy()
    	
    	def button3Click(self, event):
    		dlgpy5 = wx.FileDialog(self, "Chemin de GFortran", style = wx.OPEN)
    		retour = dlgpy5.ShowModal()
    		chemin = dlgpy5.GetPath()
    		fichier = dlgpy5.GetFilename()
    		self.textbox3.SetValue(chemin)
    		dlgpy5.Destroy()
    
    class Frame(wx.Frame):
    	def __init__(self, parent, id, title):
    		wx.Frame.__init__(self, parent, id, title, size=(660, 600), style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
    		
    		tabmngr = wx.Notebook(self)
    	
    		page1 = PageOne(tabmngr)
    		page2 = PageTwo(tabmngr)
    		page3 = PageThree(tabmngr)
    		
    		tabmngr.AddPage(page1, "Make")
    		tabmngr.AddPage(page2, "Config")
    		tabmngr.AddPage(page3, "Help")
    		
    		page1.boutonquit = wx.Button(page1, ID_QUIT, "Exit", (550, 500))
    		page2.boutonquit = wx.Button(page2, ID_QUIT, "Exit", (550, 500))
    		page3.boutonquit = wx.Button(page3, ID_QUIT, "Exit", (550, 500))
    		
    		self.Bind(wx.EVT_BUTTON, self.buttonQuitClick, id=ID_QUIT)
    	
    		self.Centre()
    		self.Show(True)
    
    	def buttonQuitClick (self, event):
    		self.Close()
    
    
    app = wx.App()
    sys.stderr = open("C:\\Documents and Settings\\bouillanne\\Bureau\\log.txt", "w")
    Frame(None, -1, 'pyd Maker')
    app.MainLoop()
    Voilà, je n'ai pas mis le code de la page3 car c'est un peu inutile, et tout fonctionne ici mis à part les deux lignes rouges pleines de "!!!!!!!!"

    Donc si quelqu'un peut m'expliquer mon erreur je lui en serai très reconnaissant.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    IL faut que PageOne connaisse PageTwo.


    Une possibilité, à la construction de PageOne, lui passer en paramètre PageTwo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class PageOne(wx.Panel):
        def __init__(self, parent, page2):
            self.page2 = page2
            ...
    et dans ta classe PageOne, tout ce qui touche à page2 doit s'appeler par et dans ta classe Frame, commencer par la création de page2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       page2 = PageTwo(tabmngr)
       page1 = PageOne(tabmngr, page2)
    Ce n'est pas la seule façon de faire

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Par défaut
    Ca marche parfaitement.

    Merci beaucoup!

Discussions similaires

  1. [AS2] Problème d'héritage
    Par wwave dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/01/2006, 09h26
  2. Problème d'héritage ?
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2005, 17h18
  3. [wxpython] problème avec les événements souris
    Par kalimero dans le forum wxPython
    Réponses: 2
    Dernier message: 13/11/2005, 15h42
  4. [wxPython] problème de rendu
    Par tool69 dans le forum wxPython
    Réponses: 5
    Dernier message: 25/09/2005, 19h43
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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