Scale, Tkinter, garder une valeur
helena8686
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
khrug -
khrug -
Bonjour,
J'aimerai savoir si c'était possible, dans le widget Scale, de mettre une valeur f venue d'une fonction, et de garder cette même valeur tout en utilisant "command" qui changera un entier dans une fonction qui doit aussi utiliser f.
En somme, j'aimerai que ceci marche : (je sais que ça ne marche pas mais c'est pour expliquer plus simplement)
Ici, j'aimerai changer l'entier i dans dessinertrajetplastique sans changer f qui est égal à ma fonction renverser().
J'ai aussi pensé à cela (qui ne marche pas) :
J'aimerai savoir si c'était possible, dans le widget Scale, de mettre une valeur f venue d'une fonction, et de garder cette même valeur tout en utilisant "command" qui changera un entier dans une fonction qui doit aussi utiliser f.
En somme, j'aimerai que ceci marche : (je sais que ça ne marche pas mais c'est pour expliquer plus simplement)
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)
Ici, j'aimerai changer l'entier i dans dessinertrajetplastique sans changer f qui est égal à ma fonction renverser().
J'ai aussi pensé à cela (qui ne marche pas) :
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)
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.
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()