Scale, Tkinter, garder une valeur
Fermé
helena8686
Messages postés
8
Date d'inscription
jeudi 24 octobre 2019
Statut
Membre
Dernière intervention
29 octobre 2019
-
Modifié le 29 oct. 2019 à 18:24
khrug - 30 oct. 2019 à 09:03
khrug - 30 oct. 2019 à 09:03
3 réponses
Bonsoir,
Je vais essayer de comprendre, car ce que tu exposes n'est pas clair.
Tu veux définir la valeur du scale depuis une fonction ?
Ça, c'est pas très complexe, soit avec une variable tkinter et sa méthode set, soit en passant par la méthode set du scale.
... et de garder cette même valeur tout en utilisant "command" qui changera un entier dans une fonction qui doit aussi utiliser f.
Là, je ne suis pas sûr d'avoir bien compris.
Est-ce que tu voudrais que lorsque valeur du scale est changé, une fonction soit appelée ? Un déclencheur ? Si c'est ça, les variables tkinter disposent d'un tel mécanisme avec leur méthode trace.
Je vais essayer de comprendre, car ce que tu exposes n'est pas clair.
Tu veux définir la valeur du scale depuis une fonction ?
Ça, c'est pas très complexe, soit avec une variable tkinter et sa méthode set, soit en passant par la méthode set du scale.
... et de garder cette même valeur tout en utilisant "command" qui changera un entier dans une fonction qui doit aussi utiliser f.
Là, je ne suis pas sûr d'avoir bien compris.
Est-ce que tu voudrais que lorsque valeur du scale est changé, une fonction soit appelée ? Un déclencheur ? Si c'est ça, les variables tkinter disposent d'un tel mécanisme avec leur méthode trace.
helena8686
Messages postés
8
Date d'inscription
jeudi 24 octobre 2019
Statut
Membre
Dernière intervention
29 octobre 2019
29 oct. 2019 à 19:30
29 oct. 2019 à 19:30
Effectivement, j'ai oublié de préciser un détail assez important : renverser() utilise des fonctions random, donc ne renvoie pas toujours la même chose. J'aimerai que, une fois cette fonction appelée, son résultat (=f) ne varie plus.
Si j'écris mon code comme cela :
dès que je vais bouger la valeur du Scale, la fonction dessinertrajetplastique va RE-appeler renverser, et donc prendra une nouvelle valeur de renverser(), ce que je ne veux pas.
Chose étrange de plus :
Dans mon premier commentaire, j'avais dit que
Au final, mon problème est résolu, sans trop savoir le pourquoi du comment
Si j'écris mon code comme cela :
Valeur=IntVar() Scale (fen,orient='horizontal', from_=10, to=365, resolution=10, tickinterval=50, length=350, label='nombre de bout de plastique au début', relief='raised', width=10,variable=Valeur, command = lambda i : dessinertrajetplastique(renverser(), int(i))).pack(side = LEFT and BOTTOM)
dès que je vais bouger la valeur du Scale, la fonction dessinertrajetplastique va RE-appeler renverser, et donc prendra une nouvelle valeur de renverser(), ce que je ne veux pas.
Chose étrange de plus :
Dans mon premier commentaire, j'avais dit que
f = renverser() Valeur=IntVar() Scale (fen,orient='horizontal', from_=10, to=365, resolution=10, tickinterval=50, length=350, label='nombre de bout de plastique au début', relief='raised', width=10,variable=Valeur, command = lambda i : dessinertrajetplastique(f, int(i))).pack(side = LEFT and BOTTOM)ne fonctionnait pas. Il marche actuellement alors que je n'ai rien changé...
Au final, mon problème est résolu, sans trop savoir le pourquoi du comment
Qu'est ce qui t'empêche de faire une fonction intermédiaire qui enregistrera la valeur de l'appel à renverser(), pusi d'appeler dessinertrajetplastique en lui passant en paramètre cette valeur ?
Quelque chose comme
Quelque chose comme
import tkinter as tk import random def renverser(): return random.choice('abcderghijklmnop') def dessinertrajetplastique(renversement, i): label['text'] = '{} {}'.format(renversement, i) retour_appel_renverser = None def scale_command(i): global retour_appel_renverser if retour_appel_renverser is None: retour_appel_renverser = renverser() dessinertrajetplastique(retour_appel_renverser, i) master = tk.Tk() scale = tk.Scale(master, from_=1, to=10, command=lambda i: scale_command(i)) scale.pack() label = tk.Label(master) label.pack() master.mainloop()
helena8686
Messages postés
8
Date d'inscription
jeudi 24 octobre 2019
Statut
Membre
Dernière intervention
29 octobre 2019
29 oct. 2019 à 20:46
29 oct. 2019 à 20:46
Si je fais comme vous me dites, j'ai le message d'erreur
File "<stdin>", line 1, in <lambda> File "<stdin>", line 3, in scale_command NameError: name 'retour_appel_renverser' is not defined