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 :

Mettre à jour un wx.StaticText


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut Mettre à jour un wx.StaticText [résolu]
    Bonjour,
    Je réalise mon tout premier programme en python (et wxpython). Il lit les données envoyées en continu par un multimètre sur le port série et met en forme le résultat. Tout fonctionne, mais je voudrais une interface rudimentaire en wxpython.
    Mon problème : Une seule valeur s'affiche et plus rien...Comment mettre à jour le wx.StaticText ???

    Merci d'avance !

    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
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
     
    import serial
    import wx
    unit={'\x80':'V', '\x40' : 'A', '\x20' : 'R', '\x08' : 'Hz', '\x04' : 'F'}
    prefix={'\x80' : 'u', '\x40' : 'm', '\x20' : 'k', '\x10' : 'M', '\x00' : '' }
    virgule={'1' : 1000, '2' :100, '4' : 10, '0' : 1}
     
    class frame(wx.Frame):
     
    	def __init__(self, aff) :
    		wx.Frame.__init__(self, None, -1, title="DMM9405", size = (200,100))
    		conteneur = wx.Panel(self, -1, size = self.GetClientSize())
    		etiquette = wx.StaticText(conteneur, -1, aff, style = wx.ALIGN_CENTRE)
    		etiquette.CentreOnParent()
     
     
    class MonApp(wx.App) :
    	def OnInit(self) :
    		#Lecture sur le port série
    		ser = serial.Serial('/dev/ttyS0',2400) ; s = ser.read(11)
    		ser.close()
    		if s[1:5]==';0:;' :
    			affich = "OL"
    		else :
    			if s[8]=='\n' :
    				affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" n"+unit[s[10]]
    			else :
    				affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" "+prefix[s[9]]+unit[s[10]]
    		#Chaine à afficher -> affich		
    		fen=frame(affich)
    		fen.Show(True)
    		return True
     
    app= MonApp()
    app.MainLoop()

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Suis ce lien vers la doc officiel wxpython.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut
    Merci pour le lien, mais je suis perdu là !
    (Mon niveau en prog s'arrête au basic du CPC6128...)

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    tu vas devoir utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etiquette.SetLabel("nouveau label")
    Je te conseille quand même un passage par les tutoriaux...
    et la migration du basic au python devrait bien se passée

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut
    Bonsoir,
    j'ai essayé pas mal de choses, dont (etiquette) SetLabel au niveau de la wx.Frame mais sans résultat.
    La boucle principale étant sur MonApp(wx.App) je pensais devoir utiliser etiquette.SetLabel ici mais etiquette n'est pas définie dans cette class.

    SVP, Quelqu'un saurait-il comment faire ????

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut Résolu !
    Si ça intéresse quelqu'un...
    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
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    #Multimetre Digitek 9405 avec wxpython
    #Version 0.1.2
     
    import serial
    import wx
     
    # Dictionnaires pour décoder les données du port série
    unit={'\x80':'V', '\x40' : 'A', '\x20' : '\xe2\x84\xa6', '\x08' : 'Hz', '\x04' : 'F'}
    prefix={'\x80' : u'\xb5', '\x40' : 'm', '\x20' : 'k', '\x10' : 'M', '\x00' : '' }
    virgule={'1' : 1000, '2' :100, '4' : 10, '0' : 1}
     
    #Ouverture du port série
    ser = serial.Serial('/dev/ttyS0',2400)
     
    class frame(wx.Frame):
     
    	def __init__(self) :
    		wx.Frame.__init__(self, None, -1, title="DMM9405", size = (250,100))
    		self.conteneur = wx.Panel(self,-1, size = self.GetClientSize())
    		self.affich="Connexion..."
    		self.etiquette = wx.StaticText(self.conteneur, -1, self.affich , style = wx.ALIGN_CENTRE)
    		wx.EVT_SIZE(self,self.OnSize)
    		self.Bind(wx.EVT_IDLE, self.OnIdle)
     
    	def OnSize(self,evt):
    		#Centrage lors d'un redimensionnement
    		self.conteneur.SetSize(self.GetClientSize())
    		self.etiquette.CentreOnParent()
    		#Taille de la police en fonction de la taille de la frame
    		self.font = wx.Font((self.GetClientSize()[0])/10, wx.DECORATIVE, wx.BOLD, wx.NORMAL)
    		#Mise à jour de la taille de la police
    		self.etiquette.SetFont(self.font)
     
    	def OnIdle(self, event):
            	#Lecture sur le port série
    		ser.flushInput() ; s = ser.read(11)
    		#Mise en forme
    		if s[1:5]==';0:;' :
    			self.affich = "OL"
    		else :
    			if s[8]=='\n' :
    				self.affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" n"+unit[s[10]]
    			else :
    				self.affich=s[0]+" "+str(float(s[1:5])/virgule[s[6]])+" "+prefix[s[9]]+unit[s[10]]
    		#Mise à jour de l'affichage
    		self.etiquette.SetLabel(self.affich)
    class MonApp(wx.App) :
    	def OnInit(self) :
    		fen=frame()
    		fen.Show(True)
    		return True
     
    app= MonApp()
    app.MainLoop()
     
    #Fermeture du port série en fin de boucle
    ser.close()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing]Mettre à jour un champ d'un autre Jfame
    Par yoyothebest dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 14/09/2004, 13h39
  2. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56
  3. Réponses: 3
    Dernier message: 09/07/2004, 10h23
  4. Mettre à jour une table depuis une autre
    Par rsc dans le forum SQL
    Réponses: 4
    Dernier message: 09/07/2004, 10h08
  5. Réponses: 6
    Dernier message: 14/02/2003, 16h52

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