Tastaturbindings

Fragen zu Tkinter.
Antworten
proggerr
User
Beiträge: 8
Registriert: Samstag 22. April 2006, 12:24

Samstag 22. April 2006, 12:34

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.
BlackJack

Sonntag 23. April 2006, 06:56

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.
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Sonntag 23. April 2006, 10:44

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
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
proggerr
User
Beiträge: 8
Registriert: Samstag 22. April 2006, 12:24

Sonntag 23. April 2006, 12:15

danke werd cih gleich ausprobieren
proggerr
User
Beiträge: 8
Registriert: Samstag 22. April 2006, 12:24

Sonntag 23. April 2006, 17:34

edit : geht!
Antworten