Je suis le cours de Python sur le site, je suis enfin arrivé aux interfaces graphiques. Le chapitre ne me pose pas de problèmes particuliers jusqu'à arriver à la méthode Entry()
Le problème n'est pas dans le code à proprement parler, il fonctionne, la fenêtre s'ouvre, la zone à écrire est bien là, j'arrive bien à rentrer du texte, mais quand je presse la touche "entrée" de mon clavier (en faite les deux incluant celle du pavé numérique) il ne se passe absolument rien.
Je ne vois vraiment pas ce qui m'échappe, car la partie après, utilisant le get() est encore plus "mystérieuse" pour moi, car je ne sais même pas s'il faut l'insérer avant, après le pack() ou même si avant/après n'a pas d'importance.
J'ai cherché des tuto sur le net, mais jusqu'à présent je n'ai rien trouvé qui puisse m'aider.
Il faut en faite lui dire qu'on s'attends à ce que l'utilisateur presse entrer et en plus il faudra lui dire d'effacer après (mais ça je vais trouver tout seul )
Désolé pour la réponse rapide, j'avais pas le temps tout à l'heure...
bind permet la liaison entre un événement (paramètre event) et la fonction d'appel. L’événement est l'appui sur la touche return qui sera lié à la fonction get_entry.
Pour l'effacement, il me semble que c'est la méthode delete.
Loin de moi l'envie d'abuser, mais je me suis dit que j'allais mettre tout ça dans une classe et et la fonction dans une méthode, et là, oh! surprise: ça ne marche plus Voilà que Tkinter m'accuse de vouloir faire rentrer deux argument là il n'en veut qu'un.
Voici le message d'erreur:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python36\Lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
TypeError: get_entry() takes 1 positional argument but 2 were given
Quant à mon code il est relativement semblable au tiens:
from tkinter import *
class Master(Frame):
"""Little classe to help me to get better"""
def __init__(self, master):
Frame.__init__(self, master)
self.text_entry = Entry(master, width=30)
#packages here
self.text_entry.pack()
self.master.bind("<Return>", self.get_entry)
def get_entry(event):
v=self.text_entry.get()
print(v)
#sortie de la classe
def test():
root= Tk()
master=Master(root)
root.mainloop()
if __name__ == '__main__':
test()
J'ai aussi essayé de mettre le bind() dans la fonction test() mais la réponse est la même. Et sans l'héritage c'est encore pire.
Il manque une partie importante, par convention le terme self, qui représente l'instance (objet créé par appel de la classe) de la classe. En gros get_entry est une méthode de l'objet créé par la classe Master.
bah oui, dans un dictionnaire, tu peux mettre n'importe quel type d'objet
TKinter, Entry, get()
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
?
Il manque une partie importante, par convention le terme