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

Tkinter Python Discussion :

Problème avec widget text et textvariable [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème avec widget text et textvariable
    Bonjour,

    Tout d'abord félicitations pour votre site remarquable !

    Je débute en langage python et de ce fait mes connaissances actuelles sont très limitées....

    Mon problème: je travaille avec une mini ordinateur pcDuino (comparable à un Raspberry Pi) sous LXDE 14.04. Je souhaiterai créer une application (ma première....) pour gérer un futur aquaterrarium.
    J'ai parcouru le net et je suis arrivé naturellement à utiliser Python 2.x et Tkinter qui sont installés par défaut sur cette mini carte.
    J'ai parcouru de nombreux tutos et je me suis enfin lancé. j'ai réussi à afficher dans une fenêtre la valeur de l'échelon d'une entrée analogique à laquelle est raccordée un capteur de température LM35.

    le programme:
    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
     
    #!/usr/bin/python
    #-*- coding: utf-8 -*-
     
    # importation modules
    from Tkinter import *
    import gpio
    from adc import analog_read
    import time
     
    #led_pin = "gpio2" # configuration LED sur gpio2
    #gpio.pinMode(led_pin, gpio.OUTPUT) # configuration de gpio2 en sortie
     
     
    def maj():
        # on arrive ici toutes les 1000 ms
    	temperature.set ('Echelon = ' + str(analog_read(2))) # lecture adc2
    	Mafenetre.after(1000,maj) #  boucle toute les 1000 ms
     
    Mafenetre = Tk()
    Mafenetre.title("Echelon LM35 sur ADC2") # titre de la fenetre
     
    # Creation d'un widget Label
    temperature = StringVar()
    Label(Mafenetre,textvariable=temperature).pack(padx=10,pady=10)
     
    maj()
     
    Mafenetre.mainloop()
    Avec ce programme (probablement pas très propre...) l' échelon apparaît dan la fenêtre du terminal et dans ma fenêtre Tkinter !

    J'ai voulu améliorer ma petite application pour faire une moyenne sur 64 lectures. J'ai créer une fonction pour affichage dans ma fenêtre..... mais impossible de faire fonctionner....

    nouveau programme:
    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
     
    #!/usr/bin/python
    #-*- coding: utf-8 -*-
     
    # importation modules
    from Tkinter import *
    import gpio
    from adc import analog_read
    import time
     
    #led_pin = "gpio2" # configuration LED sur gpio2
    #gpio.pinMode(led_pin, gpio.OUTPUT) # configuration de gpio2 en sortie
     
     
    def analog_read64(): # 64 lectures et moyenne
    	somme_temp = 0
    	i = 0	
    	while i < 64:		# lecture 64 x echelon  	
    		temp = analog_read(2) # lecture adc2
    		somme_temp = somme_temp + temp
    		i += 1
    	temp = somme_temp / 64
    	print temp
     
    def temp_LM35():
    	temp.set ('Temperature ' + analog_read64())
    	Mafenetre.after(1000,temp_LM35) #  boucle toutes les secondes
     
    Mafenetre = Tk()
    Mafenetre.title("Moyenne echelon LM35") # titre de la fenetre
     
    # Creation d'un widget Label
    temp = StringVar()
    Label(Mafenetre,textvariable=temp).pack(padx=10,pady=10)
     
    temp_LM35()
     
    Mafenetre.mainloop()
    J'obtiens l'erreur

    Traceback (most recent call last):
    File "Affichage moyenne echelon LM35.py", line 35, in <module>
    temp_LM35()
    File "Affichage moyenne echelon LM35.py", line 25, in temp_LM35
    temp.set ('Temperature ' + analog_read64())
    TypeError: cannot concatenate 'str' and 'NoneType' objects
    Un problème de type de variable que je n'arrive pas à résoudre malgré toutes mes recherches sur le net....

    Merci de votre aide afin de m'orienter sur une solution ainsi que sur les notions élémentaires qui m'échappent !

    Cordialement

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut,

    Une fonction en python retourne None par défaut, vu que tu ne retournes rien dans analog_read64(), c'est donc None qui est retourné, d'où l'erreur puisque tu concatènes string + None, donc dans ta fonction, ajoute un return de ta variable temp.

    Sans oublier de la convertir en string lors de la concaténation.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour la réponse rapide !

    Tout est OK maintenant !!!

    J'ai regardé le tuto du site sur les fonctions et procédures: tout est clair dans ma tête maintenant !

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

Discussions similaires

  1. limiter la saisie de lignes avec widget text ?
    Par ohtoulouse dans le forum Général Python
    Réponses: 8
    Dernier message: 13/02/2010, 11h53
  2. Réponses: 4
    Dernier message: 05/06/2008, 12h49
  3. Probleme avec widget Text
    Par will97 dans le forum Tkinter
    Réponses: 4
    Dernier message: 16/03/2007, 21h58
  4. [HTML] problème avec un text area
    Par krfa1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/10/2004, 11h37
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

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