est-il possible de tout écrire sur nue ligne afin de ne pas répéter le StringVar ?Code:
1
2
3
4 var1 = StringVar var2 = StringVar var3 = StringVar
j'ai cherché en vain
merci
Version imprimable
est-il possible de tout écrire sur nue ligne afin de ne pas répéter le StringVar ?Code:
1
2
3
4 var1 = StringVar var2 = StringVar var3 = StringVar
j'ai cherché en vain
merci
merci mais je ne vois pas du tout comment faire
boucle for ?
je vais de ce pas voir ça...
j'ai cherché vars : ça donne un dictionnaire non?
voilà ce que j'ai trouvé pour la création de la liste... et maintenant je bloque pour la suite...Code:
1
2
3
4 lst = [] for item in range(1, 50): lst.append("var" + str(item))
mon neurone a bossé
nouveau message d'erreur : var1 par reconnu...Code:
1
2
3
4
5
6 lst = [] for i in range(1, 50): lst.append(StringVar(value="var" + str(i))) Entry(main, texvariable=var1).pack()
Code:
1
2 Entry(main, texvariable=var1).pack() NameError: name 'var1' is not defined
merci
je reviens vers vous : quelle est la "meilleure" façon de procéder ?
lst[0].get directement dans mes requêtes avec sqlite ou alors nv_var = lst[0].get
merci
Salut,
Faites un exemple avec l'option 1 et un autre avec l'option 2 et regardez le code qui vous semble "meilleur" ou répondre au mieux à vos besoins.
Personnellement, le composant base de données n'a aucune idée de l'interface qui sera utilisée. C'est plus facile à tester. Mais vous faites ce que vous voulez en fonction de vos propres critères.
- W
[QUOTE=aaristocat;11490212]
Maintenant, je souhaite faire la même "chose avec IntVar.Code:
1
2
3
4
5
6 lst = [] for i in range(1, 50): lst.append(StringVar(value="var" + str(i))) Entry(main, texvariable=var1).pack()
J'ai bien essayé de convertir StringVar en IntVar mais ça ne fonctionne pas
merci de votre aide
Je ne comprends pas trop l'intérêt de créer une liste de 50 StringVar... Et montrer ensuite la création d'une seule Entry avec un texvariable=var1 avec une variable (Python) var1 dont on ne sait d'où elle sort.
Vous ne montrez pas ce que vous avez essayé... mais déjà si vous partez à vouloir "convertir" StringVar en IntVar, vous avez un soucis de compréhension.
- W
J'ai un tableau qui présente des mesures effectuées avec une appareil d'entrainement
j'ai donc :
50 Entry crées avec une boucle : var1, var2, var3.... var50
ma première question à laquelle vous avez répondu : comment faire les affectations var1 = StringVar, var2 = StringVar...... var50 = StringVar
50 Entry crées avec une boucle : b_var1, b_var2, b-var3... b_var50 en IntVar
idem qu'au dessus mais en IntVar donc comment procéder avec une boucle ?
toutes ces données sont ensuite insérer dans une bdd sqlite
j'espère avoir été assez clair
La question serait donc "comment procéder avec une boucle ?"
Si la structure de remplissage d'une liste avec une boucle:
ne vous est pas familière, ouvrir un tuto. et apprendre les bases est quelque chose que je ne peux pas faire pour vous.Code:
1
2
3 L = [] for _ in range(COUNT): L.append(...)
Si vous pensez avoir compris comment faire mais que vous avez un problème pour le coder, montrez déjà ce que vous avez essayé de faire.
- W
problème lorsque je fais : lst[j].getCode:
1
2
3
4
5
6
7
8
9 lst = [] for i in range(1, 51): lst.append(StringVar(value="var" + str(i))) Entry(main, texvariable=lst[i].grid(row=1, column=i) for j in range(1, 51): lst.append(IntVar(value="var" + str(j))) Entry(main, texvariable=lst[j].grid(row=2, column=j)
Bonjour,
Le premier idex d'une liste est [0]...
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...
désolé pour les erreurs de parenthèse sur le code mais je l'ai tapé trop rapidement rapidement
ensuite je récupère les variables pour les insérer dans une bbd avec par exemple :Code:
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))
le code erreurCode:
1
2
3 lst[0].get lste[0].get
ç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 intCode:
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"
Salut,
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
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 ?
merciCode:
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
Je reprends le code que je vous ai montré ici et j eremplace les ... par IntVar
Et j'obtiens une liste de 50 IntVar... (ou d'autres choses).Code:
1
2
3
4 COUNT = 50 L= [] for _ in range(50): L.append(IntVar())
Ce qui permet de simplifier le code tout en accédant à chacune des IntVar via son index dans la liste L.
- W
merci pour la réponse
j'avais bien identifié le problème lié à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.Citation:
(value="var" + str(j + 1))
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éCode:var + (i) = L[i].get
Non mais vous pouvez écrire:
Code:
1
2
3 V = [None,] * COUNT for i in range(COUNT): V[i] = L[i].get()
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
merci
je n'ai pas le reflexe "collections"