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 :

variable de contrôle


Sujet :

Tkinter Python

  1. #21
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 882
    Points : 1 545
    Points
    1 545
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Le premier idex d'une liste est [0]...

  2. #22
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Le premier idex d'une liste est [0]...
    Bien vu !

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    2 choses.
    • Vous postez un code qui ne fonctionne pas car aux lignes 5 et 9, il y manque des ')'.
    • Vous dites j'ai un problème avec lst[j].get mais cette instruction n'est pas dans le code que vous avez posté.

    De plus, qui dit "problème" dit message d'erreur qui avec Python sont suffisamment bavards pour savoir quoi faire.
    Si vous l'ignorez, c'est que vous ne savez pas qu'essayer de le comprendre était la première étape pour un diagnostic et un essai de correction.

    Tout çà pour dire que demander de l'aide, c'est poster un code qui permette de reproduire le problème avec les informations qui vont avec: soit le message d'erreur soit une description du genre "je m'attendais à ce que lst[j].get retourne XXX mais çà retourne ZZZ".

    Sûr qu'on ne va pas lire 3000 lignes de code: virer tout ce qui est sans rapport avec le "problème" (et permettre de le reproduire) est le premier boulot que vous devez faire.

    Tout çà n'est pas pour vous embêter, juste que sans code, ni message d'erreur, pas facile de vous aider.

    - W
    PS: Sûr en lisant le peu de code que vous avez écrit, l'expérience dit que c'est probablement une conséquence de ce que vous avez écrit ligne 8...

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    désolé pour les erreurs de parenthèse sur le code mais je l'ai tapé trop rapidement rapidement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    lst = []
    for i in range(0, 50):
        lst.append(StringVar(value="var" + str(i + 1)))
        Entry(main, textvariable=lst[i]).grid(row=1, column=(i + 1))
     
    lste = []
    for j in range(0, 50):
        lste.append(IntVar(value="var" + str(j + 1)))
        Entry(main, textvariable=lste[j]).grid(row=2, column=(j + 1))
    ensuite je récupère les variables pour les insérer dans une bbd avec par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    lst[0].get
    lste[0].get
    le code erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        return self._tk.getint(value)
    _tkinter.TclError: expected integer but got "var1"
     
        return int(self._tk.getdouble(value))
    _tkinter.TclError: expected floating-point number but got "var1"
    ça vient de la ligne 9 mais je ne vois pas comment corriger en conservant le IntVar car les données saisies ensuite dans la BDD sont int

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    Citation Envoyé par aaristocat Voir le message
    ça vient de la ligne 9 mais je ne vois pas comment corriger en conservant le IntVar car les données saisies ensuite dans la BDD sont int
    Au début quand j'écrivais n'importe quoi, j'étais toujours surpris que l'ordinateur se contente de m'injurier alors qu'il pourrait me donner des baffes. On peut toujours le louer pour sa grande patience, mais quand même des coups de pieds au culs de temps en temps ne seraient-ils pas plus motivants pour me forcer à réfléchir?

    Si IntVar.get doit retourner un nombre pourquoi lui assigner une chaine de caractères comme valeur initiale. Chaine de caractères qui au demeurant ne contient pas que des "digits"...

    tkinter a été écrit dans les années 90. A cette époque là, les programmeurs avaient appris à réfléchir avant de coder. Pas la peine que ceinture et bretelles vérifient pour eux que la valeur initiale d'un machin qui retournera un entier devait ressembler à un entier.

    Bon d'accord, ils passaient aussi de longues heures à coder et parfois la fatigue aidant ils se retrouvaient avec un message d'erreur comme _tkinter.TclError: expected integer but got "var1" et savaient vite en trouver la cause: car il est rare d'écrire un programme "juste" dès le premier coup. Il y a des erreurs, on les analyse, on corrige, on re-teste,...

    Rien de bien sorcier, juste ce qu'on apprend/découvre en essayant de faire les exercices que proposent les tutos.


    - W

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    merci de prendre de temps de rédiger une réponse aussi longue. Néanmoins, il me semble qu'un peu moins de condescendance serait de bon aloi.

    vous pourriez alors répondre simplement à la ou aux questions. Ce qui parait évident pour vous ne l'est peut pas pour autrui. Si je viens sur le forum c'est que mes nombreuses recherches sont restées infructueuses.

    La question est toujours sans réponse : comment simplifier le code ci-dessous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var1 = IntVar
    var2 = IntVar
    var3 = IntVar
    var4 = IntVar
    var5 = IntVar
    var6 = IntVar
    ...
    ..
    ..
    var50 = IntVar
    merci

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Citation Envoyé par aaristocat Voir le message
    La question est toujours sans réponse : comment simplifier le code ci-dessous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var1 = IntVar
    var2 = IntVar
    var3 = IntVar
    var4 = IntVar
    var5 = IntVar
    var6 = IntVar
    ...
    ..
    ..
    var50 = IntVar
    Je reprends le code que je vous ai montré ici et j eremplace les ... par IntVar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    COUNT = 50
    L= []
    for _ in range(50):
         L.append(IntVar())
    Et j'obtiens une liste de 50 IntVar... (ou d'autres choses).
    Ce qui permet de simplifier le code tout en accédant à chacune des IntVar via son index dans la liste L.

    - W

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    merci pour la réponse
    j'avais bien identifié le problème lié à
    (value="var" + str(j + 1))
    mais l'utilisation d'une chaine associée à un nombre me permettait de mieux identifier les données d'autant plus que j'ai 4 x 50.
    je peux me "repérer" aussi :
    données 1 sera 0 à 49 soit 50 valeurs
    données 2 sera 50 à 99
    données 3 sera 100 à 149
    données 4 sera 150 à 199

    où alors, si je puis me permettre un autre question, est-il possible de faire quelque chose avec une boucle comme :
    ça je n'ai pas encore réfléchi et ni cherché, ni testé

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Citation Envoyé par aaristocat Voir le message
    où alors, si je puis me permettre un autre question, est-il possible de faire quelque chose avec une boucle comme :
    Non mais vous pouvez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    V = [None,] * COUNT
    for i in range(COUNT):
         V[i] = L[i].get()

    Citation Envoyé par aaristocat Voir le message
    ça je n'ai pas encore réfléchi et ni cherché, ni testé
    Pour l'instant vous êtes coincé parce que beaucoup de variables <=> boucles et collections.

    Et si vous ne savez pas penser "boucles et collections", vous aurez des difficultés à reformuler vos problèmes avec ces structures de base du langage (ce qui est le b.a.ba).

    - W

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    merci

    je n'ai pas le reflexe "collections"

Discussions similaires

  1. Aide while variable de contrôle
    Par max64btz dans le forum C
    Réponses: 1
    Dernier message: 10/11/2019, 11h42
  2. Réponses: 2
    Dernier message: 22/05/2007, 16h18
  3. Réponses: 8
    Dernier message: 20/06/2006, 16h25
  4. Réponses: 9
    Dernier message: 15/03/2006, 10h46
  5. Formulaire continu et contrôles variables...
    Par guen dans le forum Access
    Réponses: 5
    Dernier message: 27/01/2006, 09h15

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