Seite 1 von 1
Canvas Objekt bewegen?
Verfasst: Freitag 5. Juni 2009, 12:25
von krisi12345
HI!
Die Position eines Canvas kann man ganz einfach ändern in dem Man die Positions Zahlen ändert aber wie kann man dafür sorgen sich ein Objekt gleichmäßig bewegt.
Verfasst: Freitag 5. Juni 2009, 13:10
von Pascal
ich weiß nicht ob du sowas in der art meinst...
Code: Alles auswählen
import Tkinter as tk
def make_oval():
global i, ov
ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60,fill='white', outline='white')
i+=1
ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70')
if i != 27:
win.after(500, make_oval)
win=tk.Tk()
frame = tk.Frame(win, width=500, height=400, bd=1)
frame.pack()
iframe5 = tk.Frame(frame, bd=2, relief=RAISED)
iframe5.pack(expand=1, fill=X, pady=10, padx=5)
c = tk.Canvas(iframe5, bg='white', width=340, height=100)
c.pack()
i=0
ov=c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70')
make_oval()
gleichmäßig bewegt.
Durchaus eine gleichmäßige bewegung, wenn auch keine geschmeidige

Verfasst: Freitag 5. Juni 2009, 18:01
von krisi12345
Für welche Python Version ist dieser Code gedacht wenn überhaupt?
Den Ich hab Ihn in Python 2.6-3.0 getestet und es kamen nur Fehler!

Verfasst: Freitag 5. Juni 2009, 18:12
von kaytec
Hallo krisi12345 und Pascal !
Das Objekt nicht immer wieder neu malen, da sie bestehen bleiben und immer wieder gezeichnet werden. Über "tag="ball"" löschen und neu zeichnen.
Code: Alles auswählen
import Tkinter as tk
def make_oval(i):
c.delete("ball")
c.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60, fill='gray70', tag="ball")
i+=1
if i != 28:
win.after(100, make_oval, i)
win=tk.Tk()
frame = tk.Frame(win)
frame.pack(ipady=5, ipadx=10)
c = tk.Canvas(frame, bg='white', width=340, height=100)
c.pack()
make_oval(1)
win.mainloop()
Gruß Frank
Verfasst: Freitag 5. Juni 2009, 22:25
von kaytec
Hallo !
Oder so:
Code: Alles auswählen
import Tkinter as tk
WIDTH = 800
HEIGHT = 500
class Ball(object):
def __init__(self, root, canvas, width, height, ball_width, color, speed,
start_x, start_y, tag):
self.width = width
self.height = height
self.canvas = canvas
self.speed = speed
self.direction_x = 2
self.direction_y = 2
self.tag = tag
self.canvas.create_oval(start_x, start_y, start_x + ball_width, start_y
+ ball_width, fill=color, tag=tag)
def run(self):
self.canvas.move(self.tag, self.direction_x, self.direction_y)
position = self.canvas.coords(self.tag)
if position[0] == 0:
self.direction_x = 2
if position[1] == 0:
self.direction_y = 2
if position[2] == self.width:
self.direction_x = -2
if position[3] == self.height:
self.direction_y = -2
self.canvas.after(self.speed, self.run)
root=tk.Tk()
canvas = tk.Canvas(root, bg='white', width=WIDTH, height=HEIGHT)
canvas.pack()
ball_1 = Ball(root, canvas, WIDTH, HEIGHT, 30, "blue", 5, 20, 300,
"ball_1")
ball_1.run()
ball_2 = Ball(root, canvas, WIDTH, HEIGHT, 20, "red", 10, 220, 10,
"ball_2")
ball_2.run()
root.mainloop()
Gruß Frank
Verfasst: Freitag 5. Juni 2009, 23:13
von wuf
Hallo krisi12345
krisi12345 hat geschrieben:Den Ich hab Ihn in Python 2.6-3.0 getestet und es kamen nur Fehler! Laughing
Da hast du recht in diesem Code-Stück gibt es zwei Fehler:
http://www.python-forum.de/post-137874.html#137874
Der erste in Zeile-19:
falsch:
richtig:
Der zweite in Zeile-20:
falsch:
richtig
Gruss wuf

Verfasst: Samstag 6. Juni 2009, 10:14
von Pascal
ahh danke wuf
die Fehler kommen daher, dass das ganze davor mit *-import war