Seite 1 von 1

event auch ohne bind?

Verfasst: Freitag 13. November 2009, 19:25
von dattelpflücker
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()

Verfasst: Freitag 13. November 2009, 19:55
von Dav1d
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?

Verfasst: Dienstag 24. November 2009, 19:19
von problembär
Wenn Du's nicht mit pygame machen willst:
Das Widget, an das die Taste gebunden ist, muß den Fokus haben :wink:.

Gruß

Verfasst: Dienstag 24. November 2009, 21:38
von 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.

Verfasst: Mittwoch 25. November 2009, 17:36
von jtk
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!