Seite 1 von 1

Tastaturbindings

Verfasst: Samstag 22. April 2006, 12:34
von proggerr
hallo,
ich möchte im folgenden code die Meteors nicht mit der for Schleife sondern per Tastatureingabe erzeugen.
Wie mach ich das am besten.
All meine Versuche bis jetzt sind gescheitert

Code: Alles auswählen

[...]
from Tkinter import *
from threading import *

class Weltraum:
  def __init__(self):
    self.fenster = Tk()
    self.canvas = Canvas(self.fenster, width=500,
                         height=400, bg='white')     
    self.canvas.pack()
    m1 = 'metgross.gif'               
    m2 = 'metklein.gif'
   
    for bild in [m1, m2, m2, m1, m2, m1, m2]:
        Meteor(self, bild)         

# versuch :self.fenster.bind_all('<F1>', Meteorl(self, m1, 33,333))                    
    self.fenster.mainloop()
[...]

Danke im Vorraus

Edit (Leonidas): Code in Python-Tags gesetzt.
Edit (Leonidas): In Tkinter-Forum verschoben.

Re: Tastaturbindings

Verfasst: Sonntag 23. April 2006, 06:56
von BlackJack
proggerr hat geschrieben:

Code: Alles auswählen

class Weltraum:
  def __init__(self):
    self.fenster = Tk()
    self.canvas = Canvas(self.fenster, width=500,
                         height=400, bg='white')     
    self.canvas.pack()
    m1 = 'metgross.gif'               
    m2 = 'metklein.gif'
   
    for bild in [m1, m2, m2, m1, m2, m1, m2]:
        Meteor(self, bild)         

# versuch :self.fenster.bind_all('<F1>', Meteorl(self, m1, 33,333))                    
    self.fenster.mainloop()
[...]
Bei Deinem auskommentierten Versuch übergibst Du (wahrscheinlich) keine Funktion als zweites Argument, sondern ein Meteor-Objekt. Das ``Meteor(self, m1, 33,333)`` wird einmal ausgeführt, wenn der Interpreter er an der Zeile vorbeikommt.

Code: Alles auswählen

self.fenster.bind_all('<F1>', lambda: Meteor(self, m1, 33,333))
Mach einfach eine anonyme Funktion draus, die sollte dann bei jedem Druck auf <F1> ausgeführt werden.

Verfasst: Sonntag 23. April 2006, 10:44
von Hannes-Spz
ich habe es noch nicht ausprobiert, aber wäre man nicht sicherer dran, wenn man

Code: Alles auswählen

self.fenster.bind_all('<F1>', lambda event=None: Meteor(self, m1, 33,333))
schreibt, wenn man mit events arbeitet(änderung ist die parameterliste von lambda - "event=None" )?

grüße
hannes

Verfasst: Sonntag 23. April 2006, 12:15
von proggerr
danke werd cih gleich ausprobieren

Verfasst: Sonntag 23. April 2006, 17:34
von proggerr
edit : geht!