Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme d'appel de fonction à partir d'un widget Entry

1 réponse
Avatar
oliv
lorsque j'appelle la fonction changevalises en appuyant sur le bouton bou1, tout fonctionne tres bien
par contre la même fonction appelée par
self.entree.bind ("<Return>",self.changevalises
renvoie le message d'erreur
"changevalises takes exactly 1 argument (2 given)

alors que cette fonction n'a pas d'arguments et que l'on ne l'appelle pas avec des arguments

Voici le programme complet. Si quelqu'un a une explication...merc

class Application
def __init__(self)
"""Constructeur de la fenetre principale""
self.root =Tk(
self.root.geometry('750x500+100+200'
self.images=["zero.gif", "un.gif","deux.gif", "trois.gif",
"quatre.gif","cinq.gif","six.gif", "sept.gif",
"huit.gif", "neuf.gif", "zerodiz.gif","dix.gif", "vingt.gif", "trente.gif","quarante.gif","cinquante.gif", "soixante.gif", "soixante-dix.gif", "quatre-vingts.gif", "quatre-vingt-dix.gif", "cent.gif", "deux-cents.gif", "trois-cents.gif", "quatre-cents.gif", "cinq-cents.gif", "six-cents.gif", "sept-cents.gif", "huit-cents.gif",

self.lab1=Label(self.root,text ="compte les valises le
boites et les points et écrit le résultat."
font= "arial 20"
self.lab1.place(relx=0.50, rely=0.15, anchor=CENTER
self.bou1=Button(self.root, text ='tirage ',command =self.verif
self.bou1.place(relx=0.10, rely=0.25, anchor=CENTER
self.entree = Entry(self.root, width =14, font="Arial 24"
self.entree.place(relx=0.60, rely=0.80, anchor=CENTER
self.entree.bind ("<Return>",self.changevalises
self.dessinevalises("un.gif"
self.dessineboites("vingt.gif"
self.dessinecent("cent.gif"
self.root.mainloop(



def dessinevalises(self,image)


"""Canevas avec les images valises ""
self.can = Canvas(self.root, width=200, height =200
self.img= PhotoImage(file =image
self.can.create_image(105, 100, image =self.img
self.can.place(relx=0.85, rely=0.55, anchor=CENTER
#self.can.pack(side =LEFT

def dessineboites(self,imageb)

"""Canevas avec les images boites""
self.can = Canvas(self.root, width=240, height =200
self.imgb= PhotoImage(file =imageb
self.can.create_image(122, 100, image =self.imgb
self.can.place(relx=0.55, rely=0.55, anchor=CENTER


def dessinecent(self,imagec)

"""Canevas avec les images boites""
self.can = Canvas(self.root, width=240, height =200
self.imgc= PhotoImage(file =imagec
self.can.create_image(122, 120, image =self.imgc
self.can.place(relx=0.20, rely=0.55, anchor=CENTER


def changevalises(self)
print "ici changevalise

"""changer l'image dans le canvas""
import rando

self.nval= random.randint(0,9
print self.nva
self.dessinevalises(self.images[self.nval]

self.nvalb= random.randint(10,19
print self.nval
self.dessineboites(self.images[self.nvalb]

self.nvalval= random.randint(20,25
print self.nvalva
self.dessinecent(self.images[self.nvalval]

self.nombre = self.nval+10*(self.nvalb-10)+100*(self.nvalval-19
print "nombre", self.nombr
# Programme principal
from Tkinter import
from math import log10 # logarithmes en base 1
f = Application() # instanciation de l'objet applicatio

--
oliv

-----------------------------------------------------------------------
Voir theme: http://www.frbox.net/viewtopic-515510.htm

Envoyé de http://www.frbox.ne

1 réponse

Avatar
Sébastien Aubry
oliv wrote:
lorsque j'appelle la fonction changevalises en appuyant sur le bouton
bou1, tout fonctionne tres bien.

par contre la même fonction appelée par :
self.entree.bind ("<Return>",self.changevalises)
renvoie le message d'erreur :
"changevalises takes exactly 1 argument (2 given)"

alors que cette fonction n'a pas d'arguments et que l'on ne l'appelle
pas avec des arguments.


Bonjour,

Un événement venant du clavier provoque l'appel de la fonction associée
avec un argument "event", qui est un objet que l'on peut interroger (cf.
ci -dessous). Cet objet pourrait par exemple te permettre de retrouver
quelle touche du clavier a été tapée, si tu fais plusieurs "bind".


Pour corriger ton code, tu peux donc faire :

self.entree.bind ("<Return>", lambda ev:self.changevalises())

(lambda ev:self.changevalises() est juste un "wrapper" pour transformer
un argument en zéro !)


Ou alors changer l'en-tête de changevalises pour lui ajouter un argument
optionnel :

def changevalises(self, event=None):



Sébastien Aubry



http://www.pythonware.com/library/tkinter/introduction/events-and-bindings.htm


The Event Object

The event object is a standard Python object instance, with a number of
attributes describing the event.

Attributes :

widget: The widget which generated this event. This is a valid Tkinter
widget instance, not a name. This attribute is set for all events.
x, y: The current mouse position, in pixels.
x_root, y_root : The current mouse position relative to the upper left
corner of the screen, in pixels.
char: The character code (keyboard events only), as a string.
keysym: The key symbol (keyboard events only).
keycode: The key code (keyboard events only)
num: The button number (mouse button events only)
width, height: The new size of the widget, in pixels (Configure events
only).
type: The event type.