event auch ohne bind?

Fragen zu Tkinter.
Antworten
dattelpflücker
User
Beiträge: 1
Registriert: Freitag 13. November 2009, 18:34

hallo allerseits
ich versuche ein Jump'n Run-Spiel mit Bildern (canvas) zu programmieren. ich möchte beim druck der rechten pfeiltaste das bild mit cv.move bewegen, aber es funktioniert nicht. kann man ein event auch ohne bind() abrufen?

ich programmiere erst seit kurzem, deshalb sagt mir doch bitte was ich sonst noch besser machen könnte.

achtung, der code ist v3

Code: Alles auswählen

import tkinter
import tkinter.messagebox as message
root=tkinter.Tk()
self=tkinter.Frame(root)
cv=tkinter.Canvas(root,width=763,height=490)
cv.pack(side="top")

bg=tkinter.PhotoImage(file="test.gif")
cv.create_image(0,0,image=bg,anchor="nw")

marioimg=tkinter.PhotoImage(file="testp.gif")
mario=cv.create_image(20,20,image=marioimg,anchor="nw")

class chngPos():
  def down():
    cv.move(mario,0,1)
  def up():
    cv.move(mario,0,-1)
  def right():
    cv.move(mario,1,0)
  def left():
    cv.move(mario,-1,0)

cv.bind("<KeyPress-Right>",chngPos.right)
cv.bind("<KeyPress-Left>",chngPos.left)
root.mainloop()
möge die schwacht mit dir sein :)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Den Code pls in Codetags schreiben

Code: Alles auswählen

[code=py]
[/code]

Und bist du dir sicher dass du das mit Tkinter machen willst und nicht mit z.B. Pygame?
the more they change the more they stay the same
problembär

Wenn Du's nicht mit pygame machen willst:
Das Widget, an das die Taste gebunden ist, muß den Fokus haben :wink:.

Gruß
BlackJack

@dattelpflücker: Vielleicht solltest Du erst einmal die Grundlagen von Python lernen, inklusive Klassen und objektorientierter Programmierung. Dass da alles auf Modulebene steht, unter anderem auch der Name `self` auf Modulebene an ein Objekt gebunden wird, die "Klasse" einen nicht PEP8-konformen Namen hat, und auch semantisch keinen Sinn macht, lässt böses ahnen.
jtk
User
Beiträge: 37
Registriert: Montag 19. November 2007, 17:16

wenn du bind benutzt, übergibt die methode der aufgerufenen funktion als argument das event. da dein chngPos.left ... kein argument übernimmt, kann das programm leider nicht anders, als abzustürzen.

nenn dein Frame doch bitte bitte nicht self!
Antworten