Funktionsparameter teilweise übergeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
thinkfree
User
Beiträge: 3
Registriert: Montag 22. September 2008, 18:17

Funktionsparameter teilweise übergeben

Beitragvon thinkfree » Montag 22. September 2008, 20:09

Hallo,

ich habe ein kleines Problem, was den "eleganten" Umgang mit Events angeht. Und zwar habe ich folgenden Code, der so funktioniert, aber offensichtlich nicht im Sinne des Erfinders ist:

Code: Alles auswählen

self.CAN.bind("<Button-1>", self.frameclick1)
self.CAN.bind("<Button-3>", self.frameclick2)

def frameclick1(self, event):
    self.frameclick(event, 0)

def frameclick2(self, event):
    self.frameclick(event, 1)

def frameclick(self, event, i):
    ...


Ich denke man sieht, was das Problem ist: Ich möchte in nur einer Funktion auf Links- und Rechtsklick reagieren, muss aber die Maustaste dazu wissen.

Intuitiv möchte ich das:

Code: Alles auswählen

self.CAN.bind("<Button-1>", self.frameclick(i=0))


D.h. i=0 wird bereits festgelegt und event wird dann "dazu übergeben". Aber so geht es jedenfalls nicht (3 arguments expected, 2 given...)

Wie löst man das am elegantesten?
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Beitragvon yipyip » Montag 22. September 2008, 20:37

Du suchst höchstwahrscheinlich das hier:

Code: Alles auswählen

import Tkinter as tk

####

def func(event, i):

  print i

####
 
root = tk.Tk()

for i in range(1, 6):
  root.bind('<%s>' % i , lambda event, i=i: func(event, i))

root.mainloop()


:wink:
yipyip
thinkfree
User
Beiträge: 3
Registriert: Montag 22. September 2008, 18:17

Beitragvon thinkfree » Montag 22. September 2008, 20:56

yupp super danke! genau das hab ich gesucht! :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 22. September 2008, 20:56

Die übergebenen event-Objekte haben ein Datenattribut num, in dem die Maustaste (nur die Nr. als int) gekapselt ist. Das braucht du nur abzurufen.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Dienstag 23. September 2008, 11:28

Im Modul "functools" gibt es außerdem noch die Funktion "partial".

Wer ist online?

Mitglieder in diesem Forum: __deets__, Bing [Bot]